2023第14届蓝桥杯C/C++A组参赛记录+部分题解

比赛记录

早上起得还算早,没吃早餐,我吃早餐会瞌睡,也会变蠢。
在门口还没来得及和队里其他同学聊几句就进场了......

键盘还是一样的难用,软件有codeblocks和dev,很舒服。
今年来参加蓝桥杯的人好多啊......女生也好多。
听说今年蓝桥杯有统一的正经培训,不过和我这个被踢出蓝桥杯群的废物有什么关系呢~

9点01分我才能从系统下载题目......不公平!不公平!重赛!重赛(

A题,看起来好像是中规中矩的编程计算题,之间写个代码,跑了几秒出答案了。
看到B题,一开始觉得是枚举在第几次答题之后结束,这7次答题一定是要必对的。前面的就可以任意选择了,答案就是2^24-1
C题,感觉是有规律,推式子的时候觉得只有2是不行的,于是特判然后跑路了。
D题,一开始在想线性算法,类似manacher,后来看到数据范围发现不用线性,直接区间dp就行了,写完调了一个bug,样例过了就跑了。
E题倒是把我难住了,这个东西我好像只会莫队,这样的话复杂度是带根号的,n是2e5的话,带根号是很冒险的行为。后来想想可以dsu on tree,借助一个map来维护,复杂度就是两个log,写完之后小调一个bug,dsu on tree我写得太少了,多少有点不熟练。
F题,一看就想到折半搜索,三进制枚举即可,写得很快。
G题,一眼最大生成树,询问就是在生成树上跑lca,倍增lca即可,两个算法都是我很熟练的,十分钟写完了。
H题,我还一度怀疑自己看错题了,为什么会放一个这么简单的题在这个位置啊?拆位前缀和直接切了,代码都不到20行。
I题和J题是一起看的,I题一开始没有特别好的想法,就先没写。
推了一下J题的结论,发现和莫比乌斯函数的绝对值有关,求绝对值的前缀和即可。
但是我好像不太会求这个函数的前缀和...打了个暴力跑了。
I题想到了一个做法,就是将矩阵切分成四块,分别暴力,有用的部分就是边缘的一行+一列,用状压压起来即可,合并之后有用的部分也不会超过n或者m个,同样可以状压。但是这样的话,代码会非常非常难写。于是先写了一个暴力,发现暴力跑得很快,再加了一点点剪枝,跑了。
此时时间是11点30分,开始写前面题目的对拍。重新看了一下B题,发现到100分就直接结束了,说明不能出现连续10个1,而且最后分数一定要是70,即七连对之前一定是要答错的。用这两个条件限制了一下,重新求了一个答案。
A、C和D没有拍,太简单了咋拍。
E写了个n^2暴力拍了一下,发现很对。再测了一下极限数据,发现n=3e5的时候直接超时了......后来发现数据范围只有2e5,我的代码里也是2e5,所以不是超时而是运行错误了......可能数组越界导致递归爆栈了,就没管了。
F题写了一个暴力枚举,拍了几组数据感觉挺对的,但是这题随机数据是很弱的,拍的正确性也很难说。测了一下极限,发现极限数据根本跑不出来,重新计算了复杂度,发现复杂度假了,3^(n/2)* (n/2)* log 这个复杂度根本跑不过。重新规划了一下写法,把中间的n/2给去掉了,但还是跑不出来。于是把原本的枚举方案改成dfs枚举,加入一点剪枝,随机数据居然只要0.1秒就跑出来了,真的可以的。
G题没拍,太经典了。
H题写了个n^2暴力拍,拍了一会,都是对的,就不管了。
I和J写的暴力,没法拍。
最后剩下40分钟,稍微休息了一下,省一肯定是有了......
在想该怎么给acm队的同学讲这次蓝桥杯的知识点了,知识点都有点难吖,很多都是差点讲到,可惜qwq

题解

image

A题直接暴力枚举每个数,然后判断就行了吖,代码要跑一会儿,挺快的!

image

B也是!枚举所有情况再判断即可!代码也要跑一会儿,但是不会很久!

image

找规律就行了qwq,我这题是错了的,呜呜呜痛失10分

image

区间DP,设f[i][j]表示反转[i,j]之后,新数与原数的大小关系,如果f[i][j]=1,则表示反转后新数更小,=0表示翻转后相等,=-1翻转后新数更大。这样的话,我们可以预先处理所有f[i][i],和所有f[i][i+1],接下来对于所有其他f[i][j],如果s[i]>s[j]或者s[i]<s[j],那么f[i][j]的值直接可以求出来。如果s[i]==s[j],那么f[i][j]=f[i+1][j-1]

image

考虑一个暴力,求出每个子树包含的颜色数,以及每种颜色出现次数的最大值,这个东西得用map存!
这样复杂度是O(n^2logn)的,但是我们可以dsu on tree,每个重儿子暴力之后不清空信息,直接让父亲继承。
这样复杂度就缩小到O(nlog^2n)了!

image

首先,劈开的瓜必须买!这样每个瓜只有三种状态,不被买,被买,被劈了再买。
小数不好处理,先整体乘2,避免小数出现。
暴力就是三进制枚举每个瓜的状态,复杂度就是O(3^n)
考虑一个折半搜索,即把瓜均分为两部分,两部分分别三进制枚举,一部分的结果存在map中,另一部分在map中查询。

image

发现,在原图上询问和在最大生成树上询问是一样的!
于是建最大生成树,在最大生成树上倍增LCA即可!

image

这题在这个位置真的没道理。
二进制每一位贡献独立,问题转化为01序列的问题。
区间里有奇数个1的时候才会有贡献,那么记录前缀和只需要记有多少个奇数前缀和和偶数前缀和即可。

image

切四块暴力。
但是本题有唯一解,所以剪剪枝,跑得很快。

image

这题并不会。

posted @ 2023-04-09 20:24  praying_cqf  阅读(845)  评论(0编辑  收藏  举报