过几天估计又要再放一篇游记上来,算起来上一次写题解4月的时候。。。
赶紧写几篇题解充实一下博客。。。
以下是蒟蒻在打cf的时候遇到一些有趣的题目。。。
cf 499 div2 E
题意就是给定n个数,每个数可以用无限次,求所有可能组合出的数,在k进制下可能的末尾有多少个。
n,k<1e5
首先,我们会有一个基本的思路,也就是答案实际上只和ai%k有关,然后我就写了一发暴力枚举,然后不出意外的WA了。。。
问题是我们少枚举了一些因子,其实我们可以对所有的ai求一次gcd,那么它们最后的和一定是gcd的倍数,这样就好了。
cf 499 div2 D
题意就是给定一个1~1e9的数,你需要通过不超过60次的询问确定出这个数,每次可以询问一个数b,会返回b与x比较的结果。但是返回的结果有可能是错的。但是我们知道正确和错误是事先确定好的,是在一个长度为p的01串,如果0代表第i次回答是错误的,1则是正确的。
p<30
其实还是挺简单的,直接问p次1,然后就可以确定出每次询问的正确性了,然后正常二分查找就好了。
cf 500 div2 D
大概就是每两个实际上就是把一排和一列合并起来了,建一个并查集维护一下就好了
cf 501 div3 D
在一个1~n的数轴上,i到j的距离是|i-j|,从1开始,问是否可以走k次,距离和为p,一个点可以经过多次,但是每次不可以不走
思路很简单,就是写起来有点麻烦,直接来回走快速消,然后当可以走的次数不够的时候,再精细的走就可以了。
Edu 48 C
一个2*n的方格图,每个方格的值每回合会增加a[i][j],每一回合你都需要走到一个新格子,你需要不重不漏的走过所有的格子,每走到一个格子,你的得分会加上这个格子的值,求最后最大的得分。
直接dp就好了。
Edu 48 D
给出每一行的异或和以及每一列的异或和,输出一个可行的矩阵
直接让每一行的第一个就是每一行的异或和,其他都是0,每一列也是这样,对于左下角,求一下就好了
Mail.Ru Cup 2018 Round 1
D
题意是:给出一个正整数序列,你可以把其中任意一个数字取反,最后要使异或和为0的子序列尽可能少。
这道题我不太会做,峰神给我讲了一下,慢慢才理解了。事实上这个序列的子序列是包含在这个序列的前缀和里的,如果一段子序列的异或和为0,那么这段序列对应的两个前缀和相等,那么问题就转化成了使相同的前缀和尽可能的少,任意一个区间取反的值是固定的,事实上,我们可以使全部的值进入1~(1<<(k-1))/2的区间里面,对于每个出现的数字,我们把它二分一下就好了。
E
构造题
把0放到左上角,1放到右下角即可
要不是把i和j写反了,我这场rating还能涨。。。
不过也算是上了紫名,可以打小号了