c语言 愚人节题目,【题解】牛客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 老铁,安排上了!

老铁,不难发现,题意即求用9键手机按出每一行字符串所需要的按键次数,模拟即可。(所以说只出了一个题不难吧?Σ( ° △ °|||)︴)

D 神奇的字母

观察到样例输出为:“一个字符,表示神奇的字母(范围从'a'到'z',保证小写)。”

所以输出这一句话就可以了。

E return 1;

首先说一下题意。记一个正整数x的所有因子(不包括它本身)之和为f(x)

那么这道题要输出x迭代至1的次数。

当然有的数永远无法迭代至1,如完全数(f(x)=x)、相亲数(f(x)=y,f(y)=x)等。

这种情况则输出infinity。

意味着它们在“1”以外,找到了新的归宿。。(逃

F 抬头,答案在天上

equation?tex=emmm....&preview=true

答案在天上,所以请抬头,提示已经很明显了

首先

equation?tex=f12&preview=true扫一遍确定没有链接

于是这个字符串一定出在比较靠上的位置

看样例

既然是抬头,所以要从下往上看,于是看到了

equation?tex=com&preview=true,猜测网址

于是看你的浏览器链接地址,有

equation?tex=https%3A%2F%2Fac.nowcoder.com%2Facm%2Fcontest%2F4863%2FF&preview=true或者

equation?tex=ac.nowcoder.com&preview=true

两种情况

再看数据范围,前面正整数加粗在这里暗示链接的加粗部分

c为自然数意味着字符串是从

equation?tex=0&preview=true开始计数

所以长度为

equation?tex=16&preview=true,上面链接长度为

equation?tex=16&preview=true的是后者,放到样例

equation?tex=1&preview=true中验证正确

于是这个字符串就是

equation?tex=ac.nowcoder.com&preview=true

#include

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 圆

尽可能不择手段多的放,所以我们可以将圆重叠。

于是最终可以塞入直径为正方形边长的圆。

输出

equation?tex=n&preview=true 即可。

I 牛客搜索题

备注里提示:

数据纯键盘手打。

键盘打就可以想到是根据数字打过去的。

所以我们可以想到将@!(&&$!#(转化为219774139这串数字。

然后又有:

建议参赛用户使用搜索

所以我们要搜索编号为219774139的用户

打开个人主页把链接里的数字改成上述数字就行。

题目描述是用二号字体这种格式写的,于是我们就想到是副标题。(只打了两个#,没渲染出来不要在意)

再对应输出:

一串大写字母。

于是输出GSC即可。

J 签到题

出题人是某不知名菜鸡所以匿了

题目名字来源:因为题目顺序是按题目提交先后排序的 我预测到别的出题人可能会出一些根本做不出来的毒瘤题 所以打算出一道签到题 但是发现自己提交晚了排在了后面会被人误以为是毒瘤题 为了让大家快速签到并且避过前面各种duliu题所以把名字改成了 签到题 来帮助大家快速获得抽奖机会。

首先我们发现第二行疑似是BASE64加密:

VmtaYVUxRnJOVlppUlZaVFYwZG9UMVpVUWtkT1JsSldWV3RLWVUxRVJUSlZNV1JyVkRGS1NHUkhOVlZoTVVwMVYycEJNVkpXYjNsYVJUbFRVakpTZFZaSGRGTmliRzkzVGxWV1lVMXRVbEJWYTJScllteFNjbFZ0TldGTlJGWldWbXhSZDFCUlBUMD0=

解密五次后可以得到:

109 111 100 32 49 48 48 48 48 48 48 48 55

不难发现很像ASCII码 转化后可以得到:

mod 100000007

注意是

equation?tex=10%5E8%2B7&preview=true

然后观察第一行 我们发现备注中有

equation?tex=13%20%5Cleq%20%5Ctext%7Bkey%7D%20%5Cleq%2020&preview=true 不难想到是 AES 加密(作者水平低下只知道这几种加密方式)

经过枚举可以发现

equation?tex=%5Ctext%7Bkey%7D%3D17&preview=true

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

实际上是小学生都会的高中数学题

先讲正解

先看数列

equation?tex=a_n&preview=true

下面设

equation?tex=s_n%20%3D%20%5Csum_%7Bi%3D1%7D%5En%20a_i%20&preview=true ,

equation?tex=T_n%20%3D%20%5Cprod%20_%7Bi%3D1%7D%20%5En%20s_i%20&preview=true

equation?tex=n%3D1&preview=true时,

equation?tex=a_1%3Ds_1%3DT_1%3D%200.5%20&preview=true

equation?tex=n%3E1&preview=true时,有

equation?tex=s_n%20%3D%20%5Cfrac%7BT_n%7D%7BT_%7Bn-1%7D%7D&preview=true

于是原式变成了

equation?tex=T_n%20%2B%20s_n%20%3D%20T_n%20%2B%20%5Cfrac%7BT_n%7D%7BT_%7Bn-1%7D%7D%20%20%3D%20%201%5C%20%5C%20%2C%5C%20(n%3E1)&preview=true

两边同除

equation?tex=T_n&preview=true就变成了

equation?tex=%5Cfrac%7B1%7D%7BT_n%7D%20-%20%5Cfrac%7B1%7D%7BT_%7Bn-1%7D%7D%3D1%5C%20%5C%20%2C%5C%20(n%3E1)&preview=true

于是数列

equation?tex=%5C%7B%20%5Cfrac%7B1%7D%7BT_n%7D%20%5C%7D&preview=true是以

equation?tex=2&preview=true为首项,

equation?tex=1&preview=true为公差的等差数列,

equation?tex=%5Cfrac%7B1%7D%7BT_%7Bn%7D%7D%3Dn%2B1&preview=true

所以

equation?tex=%20s_n%20%3D%20%20%5Cfrac%7BT_n%7D%7BT_%7Bn-1%7D%7D%20%3D%20%5Cfrac%7Bn%7D%7Bn%2B1%7D%5C%20%5C%20%2C(n%3E1)&preview=true

equation?tex=a_n%20%3D%20s_n%20-%20s_%7Bn-1%7D%20%3D%5Cfrac%7B1%7D%7Bn(n%2B1)%7D%20%5C%20%5C%20%2C(n%3E1)&preview=true

又因为

equation?tex=a_1%3D0.5%3D%5Cfrac%7B1%7D%7B1*2%7D&preview=true

所以

equation?tex=a_n%3D%5Cfrac%7B1%7D%7Bn(n%2B1)%7D%20%5C%20%5C%20%2C(%5Cforall%20n%20%5Cin%20N_%2B)&preview=true

然后看数列

equation?tex=b_n&preview=true

equation?tex=t_n%20%3D%20%5Cprod_%7Bi%3D1%7D%5En%20b_i%20&preview=true ,

equation?tex=S_n%20%3D%20%5Csum%20_%7Bi%3D1%7D%20%5En%20t_i%20&preview=true

于是就有

equation?tex=t_n%3DS_n-S_%7Bn-1%7D%5C%20%5C%20%2C%5C%20(n%3E1)&preview=true

带回原式有

equation?tex=S_n%2BS_n-S_%7Bn-1%7D%3D1%5C%20%5C%20%2C%5C%20(n%3E1)&preview=true

化简之后得

equation?tex=2S_n%3D1%2BS_%7Bn-1%20%7D

两边同时配凑(初中生基本常识

equation?tex=2(S_n-1)%3DS_%7Bn-1%7D-1&preview=true

equation?tex=%5Cfrac%7BS_n-1%7D%7BS_%7Bn-1%7D-1%7D%3D0.5&preview=true

又因为样例中给出了

equation?tex=b_1%3D0.5&preview=true所以

equation?tex=S_1%3Dt_1%3Db_1%3D0.5&preview=true

所以

equation?tex=S_1-1%3D-0.5&preview=true

数列

equation?tex=S_n-1&preview=true是以

equation?tex=-0.5&preview=true为首项,

equation?tex=0.5&preview=true为公比的等比数列

equation?tex=S_n-1%3D-%5Cfrac%7B1%7D%7B2%5En%7D%2CS_n%3D1-%5Cfrac%7B1%7D%7B2%5En%7D&preview=true

equation?tex=t_n%3DS_n-S_%7Bn-1%7D%3D%5Cfrac%7B1%7D%7B2%5En%7D%20%5C%20%5C%20%2C%20%5C%20(n%3E1)&preview=true

equation?tex=b_n%3D%5Cfrac%7Bt_n%7D%7Bt_%7Bn-1%7D%7D%3D%5Cfrac%7B2%5E%7Bn-1%7D%7D%7B2%5En%7D%3D%5Cfrac%7B1%7D%7B2%7D%20%5C%20%5C%20%2C%5C%20(n%3E1)&preview=true

又因为

equation?tex=b_1%3D%5Cfrac%7B1%7D%7B2%7D&preview=true

所以

equation?tex=b_n%3D%5Cfrac%7B1%7D%7B2%7D%5C%20%5C%20%2C%20%5C%20(%5Cforall%20n%20%5Cin%20N_%2B%20)&preview=true

所以

equation?tex=%5Cfrac%7Bn*a_n%7D%7Bb_n%7D%3D%5Cfrac%7B2%7D%7Bn%2B1%20%7D

这玩意只有在

equation?tex=n%3D1&preview=true时是

equation?tex=1&preview=true,否则是一个

equation?tex=0&preview=true

equation?tex=1&preview=true之间的数

所以其他情况下取整之后为

equation?tex=0&preview=true

所以正解:

#include

using namespace std;

int main() {

int n;

scanf("%d",&n);

printf("%d",n==1?1:0);

return 0;

}

下面说说神仙做法:

先试

equation?tex=0&preview=true后试

equation?tex=1&preview=true都没过

手动模拟出的答案

equation?tex=1%2C0%2C0%2C0%2C&preview=true

于是出答案

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值