愚人节比赛

愚人节比赛“战况”

洛谷愚人节(2019),做出来(3)题,(rank)垫底;
洛谷愚人节(2020),做出来(9)题,(rank 1)
牛客愚人节(2020),做出来(9)题,(rank 11)
(CF)愚人节(2020),做出来(6)题((H)题没(rush)出来),(rank 91)

一些网站

在线加密解密
在线二维码解码
文字翻转
维吉尼亚密码加密解密
https://blog.csdn.net/wswokao/article/details/80856235

April Fools Contest 2020

(codeforces)比赛
比赛链接:April Fools Contest 2020
比赛现场:本人共(AC)(6)题,(H)题现场没调出来。

A. Is it rated?

好吧,连个题面都没有~
其实看看标题就知道,本场比赛(unrated)
所以输出(no)即可。

B. Limericks

这种打油诗老套路了吧。
把每一行的第一个字符串起来,就是(two factors)
于是,我们只需要将(n)表示成(n=n_1 imes n_2),然后输出(n_1)(n_2)即可,中间不要加空格。

C. ...And after happily lived ever they

这标题好像读不通,我们调整一下语序:... and they lived happily ever after
这样子好像顺了很多,然后(0le ale 63),这里刚好有(6)个单词,不难想到是一个(6)位的二进制。

D. Again?

看到Axxxxxx第一反应是(oeis),但是这么多数列我咋打表啊...
然而,这是出题人故意恶搞的...
实际上你只需要判断奇偶性即可。

E. Jordan Smiley

卧槽,这个图片也太恐怖了。
说下我的做法:
先把这种图片放到(mspaint),然后给外层用颜料桶染成红色
再调用(python)(PIL)库,识别色块是白色还是红色,打印出一个(0/1)矩阵。
最后就是,这个(n)(m)要交换一下。。。

F. Elementary!

(elementary)再结合样例,不难发现这是考元素周期表
考虑(dp),即可(AC)本题。
我打了前(118)个元素的表,不知道具体要多少,反正一(A)也就没管了。

G. Lingua Romana

这道题的题面是用(Perligata)写的一份源代码,如果您设法运行它,您可能会认识到(TPK)算法。
之后,您可以自己实现它,也可以在(RosettaCode)上查找它。

#include <bits/stdc++.h>
using namespace std;

int a[15];

int main() {
  for (int i = 0; i <= 10; i++) {
    cin >> a[i];
  }
  cout << fixed << setprecision(2);
  for (int i = 10; i >= 0; i--) {
    int v = a[i];
    double a = sqrt(abs(v));
    double b = v * v * v * 5;
    double res = a + b;
    if (res > 400) cout << "f(" << v << ") = MAGNA NIMIS!" << '
';
    else cout << "f(" << v << ") = " << res << '
';
  }
  return 0;
}

H. It's showtime

这个语言真是有病。。编译错误会给你报错:WHAT THE FUCK DID I DO WRONG...
看到标题是(It's showtime),我们想到是(Arnoldc)(
然后这个屑玩意,整个源代码都在口吐芬芳,我也是迫不得已才写的。。

IT'S SHOWTIME
  HEY CHRISTMAS TREE read
    YOU SET US UP @NO PROBLEMO
      GET YOUR ASS TO MARS read
        DO IT NOW
          I WANT TO ASK YOU A BUNCH OF QUESTIONS AND I WANT TO HAVE THEM ANSWERED IMMEDIATELY
  
  HEY CHRISTMAS TREE ans
    YOU SET US UP 1
  HEY CHRISTMAS TREE n
    YOU SET US UP read
  HEY CHRISTMAS TREE mod
    YOU SET US UP read
  GET TO THE CHOPPER n
    HERE IS MY INVITATION n
      HE HAD TO SPLIT 1000
  ENOUGH TALK
  GET TO THE CHOPPER mod
    HERE IS MY INVITATION mod
      I LET HIM GO 1000
  ENOUGH TALK
  
  HEY CHRISTMAS TREE is
    YOU SET US UP @NO PROBLEMO
      STICK AROUND is
      GET TO THE CHOPPER ans
        HERE IS MY INVITATION ans
          YOU'RE FIRED n
        ENOUGH TALK
      GET TO THE CHOPPER ans
        HERE IS MY INVITATION ans
          I LET HIM GO mod
        ENOUGH TALK
      
      GET TO THE CHOPPER n
        HERE IS MY INVITATION n
          GET DOWN 2
        ENOUGH TALK
      GET TO THE CHOPPER is
        HERE IS MY INVITATION n
          LET OFF SOME STEAM BENNET 1
        ENOUGH TALK
    CHILL
  TALK TO THE HAND ans
YOU HAVE BEEN TERMINATED

洛谷愚人节2019

比赛链接:洛谷愚人节 2019
比赛现场:本人(rank 1)

比赛获奖条件

把这一团乱码放入(base64)解码器,跑出来即可。
解密后:
排名是(11)(4)(5)(14)的人获奖。

比赛界面下方的那张白图

把这张图片以(bmp)格式下载下来,用(notepad)打开,然后你就会看到:
出题人:chen_zhe,Owenowl,Flierking

[愚人节题目1] Newshound

这个是关于台风的……
百度德沃夏克分析法,百科的图片就是答案。

[愚人节题目2] 你所在之城的怪事

其实(dis_{i,i})恒为(0)。所以(sum_{i=1}^{n}dis_{i,i}=0),输出(0)即可。

[愚人节题目3] 现代妖怪殖民地

这道题文件不超过(2MB),可见这两个大数的位数可能很大。
所以需要(fft)优化,当然正常人肯定都用(python)爆踩过去了。

[愚人节题目4] 神秘数字

把这些单词放进(Codeforces)题库里查询题目的编号(例如(512C),那么就是(512)),即可得到答案。
把样例2的三个单词拿去查询,输出答案即可。

[愚人节题目5] 复仇美神的要塞

我们观察红石,然后还有拉杆,所以可以表示成(0/1)
红石暗的时候是(0),亮的时候是(15)
我们需要输出红石的状态,因此只要输出(T/F)即可。
然而这道题我们需要猜金块和铁块分别代表什么。
经过多次尝试,即可得到正确答案。

[愚人节题目6] 无间之钟 ~ Infinite Nightmare

直接把题目中的英文名,空格用下划线代替掉,即可查到通过数。

[愚人节题目7] 妖怪之山 ~ Mysterious Mountain

答案为

1. true
2. false
3. false
4. false
5. true
6. true
7. true
8. true
9. false
10. false
11. false
12. true
13. false
14. false
15. true
16. true
17. false
18. false
19. true
20. true

我们将这些问题写成(01)串拼凑起来。
注意到题目里有一个~,这是位运算的取反符号。
所以把这个(01)(0)(1)(1)(0)即可。

[愚人节题目8] FEELING IN THE DARK

采用盲文字母表,发现每个字母代表的数字意义就是红点的个数。

[愚人节题目9] 活泼的纯情小姑娘

这上面有一个二维码。于是我们找在线二维码解码,然后可以得到一个解密文。
提交上去,(boom)(WA)了!
愚人节当天早上,在讨论版里有人提到了(sha512)加密,于是我们赶快把解密文每个换行符替换成空格,跑一个哈希,即可得到答案。

[愚人节题目10] Fight Hard and Play Hard

我们分析知:(A(attack),B(back),S(stop))(attack)表示对方血量(-1)(back)表示自己回满血,(stop)表示这一回合啥也不干。

April Fools Contest 2017

(Codeforces)比赛
比赛链接:April Fools Contest 2017

A. Numbers Joke

显然这是一个数列,我们去(oeis)上去搜索(joke numbers),于是能查到一个史密斯数
将这个数列打表打出来即可。

A006753

B. Kid's Riddle

幼儿园小朋友估计也只会数圈圈吧,所以这道题就是让你把读入的数给转换成(16)进制,然后数圈圈的个数。

April Fools Contest 2012

(codeforces)比赛
比赛链接:April Fools Contest 2012

A. Mysterious numbers - 1

(b)数位翻转,然后计算(a+b)即可。

int a, b;

int main() {
  scanf("%d%d", &a, &b);
  int _b = b; b = 0;
  while (_b > 0) {
    b = 10 * b + _b % 10;
    _b /= 10;
  }
  printf("%d
", a + b);
  return 0;
}

B. Star

看到(star)还是个数列,果断去(oeis)上查找(star)
不难找到是A003154.

int n;

int main() {
  cin >> n;
  cout << 6 * n * (n - 1) + 1 << '
';
  return 0;
}

C. A Piece of Cake

这个切蛋糕的过程是来迷惑你的,其实它给了你(a_1,a_2,...,a_n),让你计算(sum_{i=1}^{n} i imes a_i)

const int N = 10005;
int a[N], n, ans;
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    ans += a[i] * i;
  }
  printf("%d
", ans);
}

D. Broken Checker

输入一个((1-5))的数,输出一个((1-3))的数。
毛估估是(n mod 3 + 1),但是(WA)了。
好吧,正确的是((n mod 5) mod 3+1)

int n;
int main() {
  cin >> n;
  cout << (n % 5) % 3 + 1 << '
';
}

E. MYSTERIOUS LANGUAGE

根据报错信息,易知这是INTERCAL语言。

int main() {
  cout << "INTERCAL
";
}

F. ucyhf

看到(q)字母单独出现,自然想到是凯撒密码,这个(q)对应的是(a)
经解密,我们得知是求从小到大的第(n)个反素数。
反素数的定义是:一个数和它翻转的数不相等且两数均为素数。

const int N = 1000002;
vector <int> pr;
int vis[N];
void pre(int n) {
  vis[0] = vis[1] = 1;
  for (int i = 2; i <= n; i++) {
    if (!vis[i]) pr.pb(i);
    for (auto v: pr) {
      if (i * v > n) break;
      vis[v * i] = 1;
      if (i % v == 0) break;
    }
  } 
}
int rev(int x) {
  int y = 0;
  while (x > 0) {
    y = 10 * y + x % 10;
    x /= 10;
  } 
  return y;
}
int n;
int main() {
  pre(1e6);
  scanf("%d", &n);
  for (rint i = 2; ; i++) {
    if (!vis[i] && !vis[rev(i)] && rev(i) != i) {
      n--;
      if (n == 0) {
        printf("%d
", i);
        exit(0);
      } 
    }
  }
}

G. Mysterious numbers - 2

这道题的脑洞真的是大,,,给定你的三个数分别是(f_0,f_1,n)
递推的公式为(f_n=f_{n-1}+f_{n-2}),求(f_n)
嗐,这谁想得到~
注:其实不用开(long long),极限数据答案为(218920)

const int N = 25;
ll f[N];
int n;
int main() {
  scanf("%lld%lld%d", &f[0], &f[1], &n);
  for (int i = 2; i <= n; i++) {
    f[i] = f[i - 1] + f[i - 2];
  }
  printf("%lld
", f[n]);
  return 0;
}

H

咕咕咕

原文地址:https://www.cnblogs.com/wlzhouzhuan/p/12580353.html