【题解】牛客2020年愚人节比赛
A rand36
欧皇概率检测(坑罚时题
下面是各数字的概率
0-9 10/37
10-19 10/37
20-29 10/37
30-36 7/37
其他 0
B 寻宝游戏
暗号:宝藏,被隐藏在第12层,光标所指向藏宝图的位置。首先层的英文是"floor"也就是12F,然后图片上面的路径按顺序组成"src",所以按F12打开浏览器控制台,然后选中图片查看图片地址"stc=...",由于输出描述中明确表示没有=,所以等于号后面的就是答案。
C 老铁,安排上了!
D 神奇的字母
观察到样例输出为:“一个字符,表示神奇的字母(范围从'a'到'z',保证小写)。”
所以输出这一句话就可以了。
E return 1;
首先说一下题意。记一个正整数x的所有因子(不包括它本身)之和为f(x)
那么这道题要输出x迭代至1的次数。
当然有的数永远无法迭代至1,如完全数(f(x)=x)、相亲数(f(x)=y,f(y)=x)等。
这种情况则输出infinity。
F 抬头,答案在天上
答案在天上,所以请抬头,提示已经很明显了
首先扫一遍确定没有链接
于是这个字符串一定出在比较靠上的位置
看样例
既然是抬头,所以要从下往上看,于是看到了,猜测网址
于是看你的浏览器链接地址,有
或者
两种情况
再看数据范围,前面正整数加粗在这里暗示链接的加粗部分
c为自然数意味着字符串是从开始计数
所以长度为,上面链接长度为的是后者,放到样例中验证正确
于是这个字符串就是
#include<bits/stdc++.h> using namespace std; char qwq[100]="ac.nowcoder.com"; int t; int n; int main () { scanf("%d",&t); while(t--) { scanf("%d",&n); printf("%c\n",qwq[n]); } return 0; }
G 低头,答案在地下
题目说输出链接所以在题面里找链接。
而输入输出格式都是引用格式的,所以无法存在链接。
而答案在地下,所以点击题目描述最末尾的句号然后输出那个链接就行。
H 圆
尽可能不择手段多的放,所以我们可以将圆重叠。
于是最终可以塞入直径为正方形边长的圆。
输出 即可。
I 牛客搜索题
备注里提示:
数据纯键盘手打。
键盘打就可以想到是根据数字打过去的。
所以我们可以想到将@!(&&$!#(转化为219774139这串数字。
然后又有:
建议参赛用户使用搜索算法。
所以我们要搜索编号为219774139的用户
打开个人主页把链接里的数字改成上述数字就行。
https://ac.nowcoder.com/acm/contest/profile/219774139
题目描述是用二号字体这种格式写的,于是我们就想到是副标题。(只打了两个#,没渲染出来不要在意)
再对应输出:
一串大写字母。
于是输出GSC即可。
J 签到题
出题人是某不知名菜鸡所以匿了
题目名字来源:因为题目顺序是按题目提交先后排序的 我预测到别的出题人可能会出一些根本做不出来的毒瘤题 所以打算出一道 签到题 但是发现自己提交晚了排在了后面会被人误以为是毒瘤题 为了让大家快速签到并且避过前面各种duliu题所以把名字改成了 签到题 来帮助大家快速获得抽奖机会。
首先我们发现第二行疑似是BASE64加密:
VmtaYVUxRnJOVlppUlZaVFYwZG9UMVpVUWtkT1JsSldWV3RLWVUxRVJUSlZNV1JyVkRGS1NHUkhOVlZoTVVwMVYycEJNVkpXYjNsYVJUbFRVakpTZFZaSGRGTmliRzkzVGxWV1lVMXRVbEJWYTJScllteFNjbFZ0TldGTlJGWldWbXhSZDFCUlBUMD0=
解密五次后可以得到:
109 111 100 32 49 48 48 48 48 48 48 48 55
不难发现很像ASCII码 转化后可以得到:
mod 100000007
注意是。
然后观察第一行 我们发现备注中有 不难想到是 AES 加密(作者水平低下只知道这几种加密方式)
经过枚举可以发现
f[n]=4f[n-1]+255f[n-2]+f[n-3]
结合样例 可以发现题目实际上是:
f[1]=2 f[2]=4 f[3]=114514 f[n]=4f[n-1]+255f[n-2]+f[n-3] 求 f[n] mod 100000007
矩阵快速幂即可。
其实本来想用这个解密出的式子的前几千项搞一个新的递推式的 但是考虑到这是一道签到题所以就没有加
K 四万像素五角星
L positive-interger
实际上是小学生都会的高中数学题
先讲正解
先看数列
下面设 ,
当时,
当时,有
于是原式变成了
两边同除就变成了
于是数列是以为首项,为公差的等差数列,
所以
又因为
所以
然后看数列
设 ,
于是就有
带回原式有
化简之后得
两边同时配凑(初中生基本常识
又因为样例中给出了所以
所以
数列是以为首项,为公比的等比数列
又因为
所以
所以
这玩意只有在时是,否则是一个到之间的数
所以其他情况下取整之后为
所以正解:
#include<bits/stdc++.h> using namespace std; int main() { int n; scanf("%d",&n); printf("%d",n==1?1:0); return 0; }
下面说说神仙做法:
先试后试都没过
手动模拟出的答案
于是出答案