第十四届蓝桥杯大赛软件赛国赛 C/C++ 大学 A 组
Preface
6/16 Upt:出分了,喜提国二首,本来以为前两页都是国一以为压线了,结果后面仔细一看是压线被卡了
没办法技不如人甘拜下风,备战明年Py组了
蓝桥杯战俘闪总出列!
逆天比赛早上9点要赶到六七公里外的其它学校,因此早上7点就起来了
然后坐公交颠着颠着就到了成都工业学院的门口,还刚好看到了lyy佬,就一起溜去考场了
到了考场看了一圈好多熟悉的面孔,应该都是集训队的学长啥的,但好多名字还是叫不出来
然后好像8点半就能进场了,坐定后一看好家伙俊哥就坐我前面,这下多少得沾点欧气了
一看系统好家伙经典Win7,瞬间梦回二中机房,而且键盘黏得一批,难受的要死
建好文件名后发现时间还早的很,然后就想着码点板子啥的
很快啊,上来10min就写完了NTT,还小测了一下感觉没啥问题,然后本来准备写个多项式求逆的,结果写一半有个地方忘记了,就先弃了坐等比赛开始
During Contest
好上来先看只有两个填空题,那还算比较好
结果好家伙第一个就给我搞到了,怎么数数题跑到A题来了,我印象中这个好像是有结论的来着,但是先不急往后看下先
然后这个B题未免有点太典了,一眼扩展欧拉定理,但是自己也不是很确定定理的形式,手玩了一下感觉就是欧拉函数的迭代,写个欧拉筛预处理一下感觉很对
一跑发现,奇怪,\(n=2023\)和\(n=5\)跑出来的怎么是一样的,然后手玩了一下发现确实欧拉函数后面都是\(1\)了,那应该没啥问题就扔了
接着就往后看,C题刚开始题目感觉有问题,根据样例猜到应该是要求所有正方形的大小一样,那就求出两边长的\(\gcd\)后,再找出\(\gcd\)的最小因数作为边长即可
D题很傻逼,一眼令\(t=r-2\times l+1\),答案就是\(\frac{t(t+1)}{2}\),注意特判\(t<0\)的情况,拍了下也没啥问题
E题好像是个经典题,刚开始没看清数据范围写了个用堆的\(O(k\log n)\)的做法,后面发现\(k\)好像可以到\(n\times m=10^{10}\)的范围
马上改成二分答案+二分检验,复杂度\(O(n\log n\log a_i)\),应该也是随便跑
然后F就更加一眼了,直接枚举中间那条边然后在另外两个端点查询剩下的边的最大长度就行了
现在写游记的时候发现可以维护最大值和次大值\(O(1)\)来做,考场上偷懒了写了个multiset
多了个\(O(\log )\),不过数据范围也不卡(这题没拍只测了样例,感觉可能要寄)
再往后G题就更是典中典,根据省赛的教训这次好好写爆搜,我的做法是先预处理所有合法的状态,然后在先对每一行求出符合的状态,直接一整行来枚举回溯
同时填的时候注意对列判断连着的三个的限制,最后再检验列的不同的限制
码了会过了样例后测了下\(n=10\)跑的飞快就直接交了没管了,讲道理爆搜总不能写挂吧flag
然后大的就来了,H题一看我TM直呼SAM板子,但是好家伙上次写这东西估计保守算来都是3年前了
貌似好像自从上大学后从来没有写过字符串相关的东西了,什么AC自动机,SA,SAM都忘得一干二净了
那没办法,写个\(O(n^2)\)的暴力Hash走人,而且数据范围好像还有点卡,希望unordered_map
爹可以保我一命
再看I题,一看题目就是纯纯的点分治,然后数据范围都没看,噼里啪啦写了个点分治套map
,然后往下一看woc数据范围怎么是\(10^6\)
先搞个暴力对拍上后,小测了一下\(n=10^6\)的数据,直接跑了快\(5s\),我直呼好家伙,这下大寄特寄了
但是时间此时也不太允许再想别的了,直接把两个\(\log n\)一交,就是摆
然后一看J题怎么感觉有点丁真呢,暴力地把被没被击杀的怪物状压一下,然后存一下此时在哪个点,再记录一下血量,好像就可以DP了
但是如果直接写记搜会有状态成环,但是由于我们要求时间最短,因此可以把每个状态开成一个点,用Dijkstra来转移即可
算了下内存啥的都是刚刚好,应该没啥太大问题的说,就是因为只有个小样例而且这种东西也没法对拍,只能祈祷别写挂了的说
最后还有10min回去把A随便写了个DP啥的,跑了下\(n=2,3,4\)好像都是对的,然后就把\(n=2023\)一跑然后交掉了
最后草草收拾东西就离场了,赛点发的三明治和牛奶都没吃
Postscript
出来之后和lyy佬和bh佬聊了下,感觉大家的看法都差不多啊
前面题目都是傻逼题,然后SAM忘记板子,树上距离写两个\(\log n\),然后最后一题随便搞搞
感觉这场的区分度确实有点低了,模板杯诚不欺我,和21年的那次题目根本没啥可比性
明年如果还要来就报个Python组或者JAVA组开摆了,花老子600块钱来做两场模板大赛,岂可修
不过不管怎么说也算是告一段落了,大一也马上要过完了,只能说暑假好好加训争取明年能打出点成绩吧