一年只有两场 cf,一场 Goodbye,一场 April Fools Day Contest。

本场比赛给了 8 个题,但各个题的难度都比往年有所降低。至少我打到最后还有过题,并且剩下两题都有所思路。这在往年是不敢想象的,毕竟愚人节赛以令人摸不着头脑著称。

这一次总共过了 6 题,达到了之前未曾达到的过题数。可惜有些想的慢或者写的慢了,不然至少还能多过一题

A. Is it rated?

Solved. 00:03 (+)

传送门

No.

一个没有题面的签到题 with an announcement

General announcement

We are aware that some of the problems don’t have the statement. This is by design! You have to figure out the problem yourself.

开局几秒种交了一个print('Yes')上去,可惜没有反套路。如果 April Fools Day Contest 可以 rated,那真是天大的惊喜了 :P

1
print('no')

B. Limericks

Solved. 00:19 (+)

传送门

There was once young lass called Mary,
Whose jokes were occasionally scary.
On this April’s Fool
Fixed limerick rules
Allowed her to trip the unwary.

Can she fill all the lines
To work at all times?
On juggling the words
Right around two-thirds
She nearly ran out of rhymes.

经典的藏头诗(甚至感觉有点新意不够)

虽然说是 Two Factors, 不过当时没有仔细读题,看到「factor」又看了下样例随便写了一发分解质因数也过了。事实上题目暗示明示了输入是两个质数的积。

1
2
3
4
5
6
7
8
9
10
#include<iostream>
using namespace std;
int main(){
int n;cin>>n;
for (int i=2;i<=n;i++)
while(n!=i)
if (n%i==0){cout<<i;n/=i;}
else break;
cout<<n<<endl;
}

C. …And after happily lived ever they

Solved. 00:23 (+)

传送门

经典乱序。一般的语序是 And they lived happily ever after,再结合输入的数据范围是 0~63,相当于 6 位的二进制数,就大概知道怎么做了

一时想不出来怎么表示 6 个东西的顺序交换,就直接上 Python 了

1
2
3
4
5
a=bin(int(input()))[2:]
a='0'*(6-len(a))+a
a=list(a)
a[0],a[1],a[2],a[3],a[4],a[5]=a[0],a[5],a[3],a[2],a[4],a[1]
print(int(''.join(a),2))

D. Again?

Solved. 00:15 (+)

传送门

很 kit1980 的一道题(原来是前几年出过类似的假装 OEIS 的题),这次又因为眼睛不好被骗了一次,但幸好没过样例

一开始上 oeis 速览了样例给的几个数列,以为答案就是对应数列的首项了。又想到 oeis 可能是字典序升序的(其实不是,只有纸质书为了方便检索才这么做),样例给了 A089956 是 0,A089957 是 1,那就是临界点了(完全没看到第一个样例是更大的 A278832),然后就这么交了一发

Wrong answer on test 1 之后,沉思了大概不到 10 分钟,突然反应过来,这什么 sb 题啊 2333

这题按过题人数排名,是第二位的。我也确实是签完到马上去开的,不过失误了,浪费了一些时间

1
2
3
4
5
n=int(input()[1:])
if n%2==1:
print(1)
else:
print(0)

E. Jordan Smiley

Unsolved.

传送门

题意给的很明显了,给了一个图片,输入给一个坐标,问是 in 还是 out

主要是处理图片的问题。大概可以先用 Photoshop 之类的图处理软件先把空的内部块填色(这样就不需要自己写 floodfill 来处理了),然后再用 pillow 之类的图处理库处理一下坐标

过题的人也挺多了,懒得补了

F. Elementary!

Solved. 01:39 (+1)

传送门

先 Google 了一把,结果告诉我「基本演绎法」??

在这里卡了挺久的,一大段时间在思考 F 和 G 之间反复横跳

最后意识到跟「Element,元素」有点关系。观察样例,输出 YES 的都是可以用元素周期表中的元素代号拼起来的

学弟搞了一把元素列表,直接嫖来了。然后写个搜索或者 dp 就可以了(贪心是不行的,WA 了一发)

1
2
3
4
5
6
7
8
9
10
l=set(["H","HE","LI","BE","B","C","N","O","F","NE","NA","MG","AL","SI","P","S","CL","AR","K","CA","SC","TI","V","CR","MN","FE","CO","NI","CU","ZN","GA","GE","AS","SE","BR","KR","RB","SR","Y","ZR","NB","MO","TC","RU","RH","PD","AG","CD","IN","SN","SB","TE","I","XE","CS","BA","LA","CE","PR","ND","PM","SM","EU","GD","TB","DY","HO","ER","TM","YB","LU","HF","TA","W","RE","OS","IR","PT","AU","HG","TL","PB","BI","PO","AT","RN","FR","RA","AC","TH","PA","U","NP","PU","AM","CM","BK","CF","ES","FM","MD","NO","LR","RF","DB","SG","BH","HS","MT","DS","RG","CN","NH","FL","MC","LV","TS","OG"])
def dfs(s):
res=True
if len(s)==0:
return True
elif len(s)==1:
return s[:1] in l
else:
return (dfs(s[1:]) if s[:1] in l else False) or (dfs(s[2:]) if s[:2] in l else False)
print('YES' if dfs(input()) else 'NO')

G. Lingua Romana

Solved. 01:57 (+)

传送门

这题很考验 Google 能力了。先是翻译了一通,当然几乎什么也没看明白。最后在互联网的某个角落里找到了一种 perl 方言 —— Lingua::Romana::Perligata

之后对着里面「可能是文档」的内容,再一个个查每个词在里面的相关内容,终于在最后连蒙带猜把题面翻译成了 C++ 程序(虽然基本是 C 语法),一发过了

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[11];
for (int i=0;i<11;i++)cin>>a[i];
for (int i=10;i>=0;i--){
double A=sqrt(abs(a[i]));
double B=pow(a[i],3)*5;
double r=A+B;
if (r<400)printf("f(%d) = %.2f\n",a[i],r);
else printf("f(%d) = MAGNA NIMIS!\n",a[i]);
}
}

H. It’s showtime

Unsolved.

传送门

没补。据说是一种奇妙的语言,叫「ArnoldC」,总是以IT'S SHOWTIME开头,以YOU HAVE BEEN TERMINATED结尾。用这个语言按题面写一下就行,但是可能需要学习一下这个语言是怎么写的。