2022/3/25模拟测试

三道题,满分300,得分90

乌合之众:给一个矩阵,求它所有子矩阵的f值之和和g值之和(f为矩阵所有元素按位与的值,g为矩阵所有元素按位或的值)

这道题,从头到尾没看懂,样例推也推不明白,只知道可能是怎样计算的,后来知道只要暴力枚举就能得到30分,感觉有点亏。还有在看测试点数据范围时发现一些数据点里的矩阵是1和0组成的,应该有些规律。还有就是按位与和按位或都是二进制位的计算,每一位之间相互独立,所以可以整个矩阵一位一位去看。

正解:每一个二进制位分别计算结果,∑f就是全部矩阵个数减去全为0的矩阵个数,∑g就是全为1的矩阵个数(神奇)

圣战:n个人m个敌对关系,分成两个阵营,一对敌人和好使两个阵营中没有敌对的人。

这道题相当于是给一个图,两种颜色,删去一个边让每个边相连接的两个点颜色不一样,那么最后得到的这个图中一定不会有奇数个点组成的环,那么就可以在原来的图上去寻找奇数个点组成的环,这个环上的每一条边都有作为答案的可能,但要注意删去这条边时这条边有没有在一个偶数个点组成的环里,如果在,那么删掉后这个偶环又变成了奇环,这个答案就不成立了。

正解:先将这些点生成一个树,然后添加非树边(敌对关系),若n与v点树上距离为奇数,加上这条边成偶环,合法;若为偶数,加上这条边成奇环,不合法。并且为了不出现偶环变奇环这种情况,所统计的边要是被不合法边覆盖且不被合法边覆盖的边即为答案。(运用树上差分,被不合法边覆盖权加一,被合法边覆盖权减一,对于一个联通块中答案为权值等于这个连通块中不合法边的数量,总答案为每个联通块答案之和)

花火之声不闻于耳:长为n的正整数序列a,进行m次操作(一段中的数乘x或查询一段中每个数乘积的欧拉函数值)

一开始看到这道题一看就看出来是线段树,而且打lazy也比较舒服,但打到后面发现举步维艰(线段树不熟练),而且欧拉函数的求法打的稀碎。

没有想到只需要建立一个输出文件就能得五分(离谱)

正解:线段树,维护乘积,预处理质因子集合,整个序列分成四段进行预处理,查询时再拼回去(?)

 

考试时由于第一题没看懂第三题敲不明白导致把时间全都用在第二题上,幸好得了点分。

posted @ 2022-03-25 07:36  LZMiiu  阅读(32)  评论(0编辑  收藏  举报