codeforces做题记录(持续更新)

  过几天估计又要再放一篇游记上来,算起来上一次写题解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还能涨。。。

 不过也算是上了紫名,可以打小号了

转载于:https://www.cnblogs.com/htwx/articles/9802376.html

你可能感兴趣的:(codeforces做题记录(持续更新))