前言:第一次打codeforces愚人节,有点高看我自己的脑袋了,不过还是挺好(红)玩(温)的
也不知道这种应该怎么写题解,就不放正确答案了,把可能的思考过程贴一下
A、Piecing It Together
这是唯一一个不需要动脑子的题目了,拼图拼出来是
print("puzzling")
所以输出这个单词就行了(不会有人连着print也输出了吧)
B、Plinko
去过电玩城的应该都知道这个机器,
我理解的是你要连续赢10轮,没看懂,交了一发发现查看提交的时候会把球下落的轨迹标出来,这就更不知道要怎么办了
但其实是不是球落到绿色区域就算赢了,机器会窄一些,所以可以从机器外面−1-1−1或者171717之外的地方丢下去,所以输出这些数就好了
C、Would It Be Unrated?
这个题就有点不讲理了,和输入没有任何关系,据说是因为没有人猜出来,官方提交了一发,而在有一个人通过后,错误的提交就会在查看提交的时候显示错误样例。。。
随便提交一发看一下输出就行了,但是在没人过的时候就纯猜
D、Where Am I?
不会,明明是过的人第二多的题但是看不懂,提交上去会告诉你一个距离多少,不知道是不是靠这个猜,而且好像和你的答案和结果距离的关系还不是线性的
E、Pair Count
额,点链接,然后跳转到一个猜单词的网站,然后猜出一个单词是MULTIPLY,是乘的意思,所以把异或符号换成乘号就完事了
一般怎么会有人去点那个链接的啊。。。而且之前点过题目中的链接,然后印象中是没有魔法还进不去那个网站。
F、⅓ оf а Рrоblеm
又是更无语的一个题了,如果你不认识俄语的话一定是用英语打开的,然后只看到乱七八糟的符号、数字,然后用俄文打开这个题,就可以发现题目变了,然后有的部分恰好是英语所没有的,这两个联系起来可以得到一个公式
12∗a+14∗a∗b+∣a−b∣+(a−3∗b)∗b+2
12 * a+14 * a * b + |a - b| + (a - 3 * b) * b + 2
12∗a+14∗a∗b+∣a−b∣+(a−3∗b)∗b+2
算就完了
G、Definitely a Geometry Problem
这个是不是除第一题最正常的题了,但是赛事根本没看这个题。
先排序,按照先x后y的顺序,然后枚举每组为距离为kkk的连续区间,圆的半径即为(x1−x2)2+(y1+y2)24×π\frac {(x_1-x_2)^2+(y_1+y_2)^2} 4 \times \pi4(x1−x2)2+(y1+y2)2×π,取最小值即可
H、Blurry Vision
唯一一个赛时没有人过的题目了
答案👇
"CODEFORCES", "EYE", "TESTING", "SYSTEM", "APRIL", "FOOLS", "YOU", "READ", "POORLY", "GET", "EYEGLASSES"
从APRIL这个单词后面就完全看不到了,也不知道怎么办,看了俊杰老师的直播真就是一个一个猜,看到问题标签官方贴了一个快速傅里叶变换(fft),但是真想不到有什么联系。
L、Mysterious Script
输入两个数a和b,输出a+b
只不过a和b是经过加密后的字符串,输出也是加密后的字符串,首先可以找到一个规律,就是每个表示数字的字符串最后都有一个s,那么大胆的去把所有的字符串最后的s都去掉,通过题目中的表格可以看出来一部分数字
sha 表示 3
lesha 表示 12
shon 表示 5
te 表示 7
le 表示 1
lonshonletashashaleteshate 表示 998244358
经过上面的信息,12这种数是怎么表示的?lasha是由1和3拼接成的,也不等于12,大胆猜测一下有可能是十进制,1*9+3 = 12
然后可以通过题目中的样例推出剩余的数,然后写一个进制转换即可
void solve(){
string s1,s2;cin>>s1>>s2;
string a[9] = {
"la",
"le",
"lon",
"sha",
"she",
"shon",
"ta",
"te",
"ton",
};
auto change = [&](string s) -> int {
s = s.substr(0,s.size()-1);
int res = 0;
while(s.size()){
for(int i = 0;i<9;i++){
if(s.substr(0,a[i].size()) == a[i]){
s = s.substr(a[i].size());
res*=9;
res+=i;
break;
}
}
}
return res;
};
auto check = [&](int x) -> string {
string res = "s";
while(x){
res = a[x%9]+res;
x/=9;
}
return res;
};
cout<<check(change(s1)+change(s2));
}
J. Premiere at a Wrong Time
???????????????????????
我的发,这啥
看了一下别人的代码,考虑了一下可能的思路
先随便输入一个字符串再随便输出一个,肯定可以得到一个错误提交,然后可以发现第一个点输入了first,输出Nauuo and Votes
改一下,如果输入的是first,则输出Nauuo and Votes
赛后补题可以看到所有的测试样例,所以这时可以看到第二个样例,输入的second,输出的Nauuo and Chess,然后如果输入不是first的话输出这个字符串即可
但是赛时如果只能看到第一个样例的话真不知道怎么猜了