竞赛讨论区 > 【题解】牛客2021年愚人节比赛

【题解】牛客2021年愚人节比赛

头像
王清楚
编辑于 2021-04-03 22:19:09 APP内打开
赞 10 | 收藏 1 | 回复16 | 浏览2701

A 出愚人节欢乐赛

图片说明
图片说明

图片说明

B 你这题,狗屁不通

看到“牛客服务器上现在的时间”多次出现,猜测题意是要输出系统时间。

然后备注中UTC多次出现,所以要输出0时区的时间

#include<bits/stdc++.h>
using namespace std;
int main()
{
    time_t timep;
    tm *p;
    time(&timep);
    p = gmtime(&timep);
    printf("%04d/%02d/%02d %02d:%02d:%02d", (1900+p->tm_year), (1+p->tm_mon), p->tm_mday, p->tm_hour, p->tm_min,p->tm_sec);
    return 0;
}

C迁跃据数、I数据跃迁

这两个题需要二分评测姬。

首先能够想到,评测姬在ACM赛制下不止有AC和WA两种结果,实际上还包含TLE、RE等。

我们可以取最常见的TLE、RE、WA,三种结果作为信号。

首先编写这样一段代码

#include<bits/stdc++.h>
using namespace std;
void check(int l,int r)
{
    while(l==r);
    int x;
    cin>>x;
    int mid=l+r>>1;
    assert(mid<x);
}
int main()
{
    int l=1;
    int r=1000;
    ///---------------
    //RE-> r=l+r>>1;
    //WA-> l=(l+r>>1)+1;
    //TLE-> l=r=input
    //根据评测结果作为信号,将信号翻译成代码往下填。
    //终止信号为TLE信号,当接收到TLE信号时,将代码复制到本地编译运行。

    ///---------------
    cout<<l<<endl;
    check(l,r);
    return 0;
}

将上述代码复制黏贴到C题“迁跃据数”中,点击提交。

如果结果是”答案错误“,就复制一行如下代码跟在后面

l=(l+r>>1)+1;

如果结果是“运行错误”,就复制一行如下代码跟在后面

r=l+r>>1;

如果结果是“运行超时”,那么好了,这个时候把代码从牛客评测机的代码框里面贴回本地,点击编译运行。

输出结果应该是 514(是114514的514)

#include<bits/stdc++.h>
using namespace std;
void check(int l,int r)
{
    while(l==r);
    int x;
    cin>>x;
    int mid=l+r>>1;
    assert(mid<x);
}
int main()
{
    int l=1;
    int r=1000;
    ///---------------
    //RE-> r=l+r>>1;
    //WA-> l=(l+r>>1)+1;
    //TLE-> l=r=input
    //根据评测结果作为信号,将信号翻译成代码往下填。
    //终止信号为TLE信号,当接收到TLE信号时,将代码复制到本地编译运行。
    l=(l+r>>1)+1;
    r=l+r>>1;
    r=l+r>>1;
    r=l+r>>1;
    r=l+r>>1;
    r=l+r>>1;
    l=(l+r>>1)+1;
    l=(l+r>>1)+1;
    r=l+r>>1;
    l=(l+r>>1)+1;
    ///---------------
    cout<<l<<endl;
    check(l,r);
    return 0;
}

然后语言切换到PHP,提交I题”数据跃迁“,直接填写514点击提交。

因为现在已经知道I题的答案就是514了,所以相比以前,我们又多了AC这一种信号可以使用。

即,现在可用于编码的信号就变成了AC、WA、TLE、RE四种。恰好题目中的字符串也是'a','b','c','d'四种。

编写如下代码

#include<bits/stdc++.h>
using namespace std;
char s[10];
int main()
{
    cin>>s;
    ///根据第i次提交的信号,注释相应的行
    ///1
    if(s[0]=='a'){cout<<514<<endl;return(0);}
    if(s[0]=='b')return(0);
    if(s[0]=='c')assert(0);
    if(s[0]=='d')while(1);
    ///2
    if(s[1]=='a'){cout<<514<<endl;return(0);}
    if(s[1]=='b')return(0);
    if(s[1]=='c')assert(0);
    if(s[1]=='d')while(1);
    ///3
    if(s[2]=='a'){cout<<514<<endl;return(0);}
    if(s[2]=='b')return(0);
    if(s[2]=='c')assert(0);
    if(s[2]=='d')while(1);
    ///4
    if(s[3]=='a'){cout<<514<<endl;return(0);}
    if(s[3]=='b')return(0);
    if(s[3]=='c')assert(0);
    if(s[3]=='d')while(1);
    ///5
    if(s[4]=='a'){cout<<514<<endl;return(0);}
    if(s[4]=='b')return(0);
    if(s[4]=='c')assert(0);
    if(s[4]=='d')while(1);
    return 0;
}

把上述代码贴到I题“数据跃迁”当中,提交

如果结果为“答案正确”,就注释第一行。

如果结果为“答案错误”,就注释第二行。

如果结果为“运行错误”,就注释第三行。

如果结果为“运行超时”,就注释第四行。

#include<bits/stdc++.h>
using namespace std;
char s[10];
int main()
{
    cin>>s;
    ///根据第i次提交的信号,注释相应的行
    ///1
    if(s[0]=='a'){cout<<514<<endl;return(0);}
    if(s[0]=='b')return(0);
    if(s[0]=='c')assert(0);
    //if(s[0]=='d')while(1);
    ///2
    if(s[1]=='a'){cout<<514<<endl;return(0);}
    //if(s[1]=='b')return(0);
    if(s[1]=='c')assert(0);
    if(s[1]=='d')while(1);
    ///3
    if(s[2]=='a'){cout<<514<<endl;return(0);}
    if(s[2]=='b')return(0);
    //if(s[2]=='c')assert(0);
    if(s[2]=='d')while(1);
    ///4
    //if(s[3]=='a'){cout<<514<<endl;return(0);}
    if(s[3]=='b')return(0);
    if(s[3]=='c')assert(0);
    if(s[3]=='d')while(1);
    ///5
    if(s[4]=='a'){cout<<514<<endl;return(0);}
    if(s[4]=='b')return(0);
    //if(s[4]=='c')assert(0);
    if(s[4]=='d')while(1);
    return 0;
}

发现被注释掉的行依次是'd','b','c','a','c',说明C题的答案为字符串"dbcac",点击C题“迁跃据数”,切换语言为PHP,填入dbcac,提交。(编码的时候不能用函数或者define,不然会被编译器蛇皮优化掉,很烦)

D E

据说都暴力题,大概不需要题解?出题人给了代码,但是我懒得放了- -

Fqcjj背贯口

答案详解

刘备、关羽、张飞、赵云、曹操、徐庶、夏侯惇、颜良 8个
马 8个
龙 4个
豹 1个
虎 1个
蛇 1个
兽 1个

8 8 16

然后因为出题人不识数,所以愚人节快乐
(太阴间了

G 诡异的七重咒印

看数据找规律。
第一个数列,

第二个数列,

第三个数列,

第四个数列,

第⑤个数列,

第六个数列,

第七个数列,

使用快速幂计算即可。第⑤个需要欧拉降幂。

H. 氵林女女的记录本

每条记录都有小提示,根据提示去思考就可以了。

  1. 前面提示了气候变冷,从偏旁部首可以猜出歌手是许嵩。在许嵩《降温》里面有一句歌词“11月20日0点......今日消费是281人民币”,所以答案是 281

  2. 第二次工业革命开始大概是19世纪60年代后期,从偏旁部首可以猜出歌手是陈奕迅,显然是《1874》里的歌词,所以答案是 1874

  3. 本题提示写给李宗盛的歌,Google关键词致李宗盛发现第一条是杨宗纬的《越过山丘》,对比字形发现无误,所以查看歌词后发现答案是 20

  4. 清楚姐姐的出生年份众所周知,从字形不难得出歌手是那英和王菲,所以这首歌是《相约1998》,答案是1998

  5. 不难看出歌手是周杰伦,歌曲是《发如雪》,《红楼梦》第九十一回“布疑阵宝玉妄谈禅”里提到了宝玉思索半晌大笑道:“任凭弱水三千,我只取一瓢饮。”——宝玉用此典来回答黛玉的发问,意思是说宝钗的好与不好皆与我无关,我心中只有你一个人。因此答案是繁华如三千东流水里的3000

本场比赛出题团共有5位(大概是愿意透露姓名?)的出题人
希望大家玩的开心~

出题人1 图片说明
出题人2
图片说明
出题人3
“qcjjyyds”
图片说明
出题人4
图片说明
出题人5
(匿了)

图片说明
图片说明

16条回帖

回帖
加载中...
话题 回帖

近期热帖

等你来战

查看全部

热门推荐