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
我太菜了

posted @ 2021-10-05 17:36  青D  阅读(53)  评论(0编辑  收藏  举报