九省联考2018游记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zxin__/article/details/79867118

Day0
上午到学校,去tututu寝室,入坑荒野求生,真tm好玩(虽然只打了一把)
下午坐高铁去SH,发现SH非正式选手只有HEZ的。
Day1
开局看T1,没意识到状态数是个组合数,于是写了个程序算状态数,还写挂了

#include<cstdio>
int n=10,m=10,f[15][15],i,j,k;
int main(){
    for(i=1;i<=m;++i)f[1][i]=1;
    for(i=2;i<=n;++i)
        for(j=1;j<=m;++j)
            for(k=j;k<=m;++k)f[i][j]+=f[i-1][k];
    j=0;
    for(i=1;i<=m;++i)j+=f[n][i];//相当于硬点最后一行有东西剩下
    printf("%d\n",j);
    getchar();
    return 0;
}

然后就哈希表的数组开小挂成80(居然只挂成80)
本来gen了大数据没RE,以为稳了。要是本机是linux就会报错,我就会发现问题,然而本机是win,辣鸡windows毁我青春。
T2写了发错误贪心,还自信满满,拍都没拍。
于是9:20左右开始干T3。
一开始写了发n^2k,WA了,死活调不出,心态有点小崩,弃疗去写n^3,还是调不出。
突然灵机一动,把n^2k代码改了下,就过完两个样例了。
最后时间一直在卡常,大力循环展开,7.1s->5.5s,效果不是很明显。
出来后得知T2贪心被hack了。
最后Day1总分80+55+65=200,居然比noip2017Day2我的得分还高(那Day2得分是不是比noip2017Day1我的270还高呢?
好像200在HEZ排不进前十,但在SH有rk4?有点惊讶啊。
Day2
Day1的电脑gg了,换到左边的一台。
开场花了十几分钟读完三道题,发现键盘手感很差,试图跟右边电脑的键盘换一下,无果。
冷静分析了一下T1,感觉可以二分+网络流,应该是 O(Tn(nc+m)(logn+logm) ,9点时写完,调到9点半多才过第一个小样例,然后就过完了所有四个样例。造了发极限数据,300ms+,应该不会tle吧。
仔细观察了下T2,感觉就是选k+1条点不交的链,使得总长最大,应该可以nk^2,但不知跑不跑得过k=100,3e9在7sO2面前还是挺怂的。
再看T3,冷静分析了一波,感觉如果是三种合法情况的第二种,l的位置对答案的贡献应该是关于出现位置的分段一次函数?随便来个数据结构在SAM parent树上合并就行了吧。而剩下两种情况都可以O(1)计算(那我是不是可以干掉这题呢?)
花了点时间想了下细节,在11:15决定开码,12:20码完了4.3K代码,离考试结束还剩10分钟,样例输出”2 -2”(实际应该”5 1”)
然后就滚大粗了。
后来得知自己0+10+5,T1 CE了,memset没加#include<cstring>,考场里本机居然还能过编译(更可气的是,#include<bits/stdc++.h>本机CE,把我害死)
然而我加上头文件后还是爆零,有句话在外面,放进去就AC了。
幸好不是自己省选,下次再也不轻易写正解了,多出来的时间不如用来检查,上次ZJOI Round1那种打法没gg纯粹是运气好,像这次,写题写到死,就真的挂了。
upd:现在T3调完了,大概花了1个多小时,思路还算是清晰的(不然我也不会敢写了),纯粹是细节多。考场上以为线段树合并或其他平衡树合并不能维护每个数与前驱的乘积,要么多log,只能splay启发式合并 我才不会告诉你我以前从没写过splay维护权值,只会用splay维护序列和干LCT,真是naive。
一开始query完忘记splay,T成45,改完后本地用时大概是std的1/3,目前loj最快。讲道理splay常数那么大,我也不知道我怎么做到比线段树合并还快的。

猜你喜欢

转载自blog.csdn.net/zxin__/article/details/79867118
今日推荐