CSP-J/S2020游记
J组
早上乘车到考场,地点在泉州师范。
考前背了背模板,结果一个都没用上(悲伤)。
然后拍了几张合照就进去考试了。
T1
30min切掉。题目说要将一个数拆成$2^k+2^{k1}+...+2$的形式,且不可以存在$2^0$这种模式。于是开始直接加个特判:
if(n%2) { printf("-1"); return 0; }
接着我们可以利用$\tt{C++}$中$\tt{log2()}$函数,对于当前的$n$,定义一个$f$使$f=log2(n)$,让$n$减去$1<<f$得到新的$n$,再输出$1<<f$就可以了。
Ac Code
#include<bits/stdc++.h> using namespace std; int n; int main() { scanf("%d",&n); if(n%2) { printf("-1"); return 0; } int f=log2(n); while(n) { n-=(1<<f); printf("%d ",(1<<f)); f=log2(n); } return 0; }
T2
考试的时候sb了,竟然写了个$O(n^2logn)$的暴力,把桶排忘得一干二净。考完后和$qmq$和$yezl$巨佬对答案后发现自己可以退役了(菜死了)。这题没什么技术含量,就不多说了。(代码咕咕咕了)
T3
一看题发现可以用栈和搜索来模拟,可以得$30pts$,结果太弱(懒)了不会(想)做。于是直接随便咕一咕。(正解到现在还没想出来)
T4
2000年的原题?仔细一看发现不对。本来想打一个搜索的暴力,然后发现只能有$20pts$,而且自己调了半天样例还没过。
于是想到了动态规划。考试的时候定义了一个$f[i][j]$表示$(i,j)$到$(1,1)$的最大数字和。调了半天后发现只剩$10min$了,样例还没过,最后只能打一个向下,向右走的残缺$dp$(没过样例)。
考后
自我估分100+50+0+0=150
luogu估分100+50+30+0=180
CCF咕出来是100+50+20+15=185
我太菜了。
S组
T1
超级大模拟。直接乱打一通。
T2
发现貌似可做。于是打了一个$O( {\textstyle \sum_{i=1}^{n}} (\log_2{a_i})\times m+ {\textstyle \sum_{i=1}^{k}}( (\log_2{a_i})\times m+k))$的神奇复杂度的大暴力。然后就开始颓。
T3
看不懂。
T4
看不懂。
考后
自我估分0+0+0+0=0
luogu估分10+10+0+0=20
CCF咕出来是10+40+0+0=50
我太菜了