
codeforces
博主在codeforces上不会的题,我太菜了,自闭
鸣蜩二九~
一岁有一岁的味道,一站有一站的风景。
花会沿路盛开,以后的路也是。
展开
-
Codeforces Round #688 (Div. 2) C. Triangles(思维,数学)
题目传送题意:给你一个n*n的矩阵,上面写着0到9的数字,现在问你:选取同一种数字中的任意三个,组成的三角形的最大面积 * 2是多少,每选取一种数字的时候,你最多可以改动一次,使得某个位置变成你想要的数字,在这个数字选取完后,改动的数字变回原样。思路:1.既然每次可以改一次,那么肯定只要存在俩个点那么三角形面积就不会为0.那么我直接枚举俩个点就是了,另外一个点配合选取的俩个点使得面积最大即可,但是暴力选取俩个点会T2.我们知道三角形面积是 底乘高除二 ,那么既然另外一个点是我们可以控制的,可以配合原创 2020-12-05 14:46:11 · 359 阅读 · 0 评论 -
C. Discrete Acceleration (二分)
题目传送题意:有俩个人,一个人在起点,一个人在终点,俩人同时相向而行每经过一个特殊的点,速度都会增加1,初始速度都为1,问,俩人相遇的时间思路:二分时间找俩人走的路程,俩人走的路程再和走路程比较,如果大于了总路程,那么r = mid。注意,二分的时候,把起始点和终点的坐标加进去。AC代码#include <bits/stdc++.h>inline long long read(){char c = getchar();long long x = 0,s = 1;while(c原创 2020-12-03 22:53:44 · 153 阅读 · 0 评论 -
Codeforces Round #677 (Div. 3) E. Two Round Dances(数学)
题目传送题意:给你n个人(一定是偶数),现在让你分成俩组。每一组都围成一个圈,问有多少种不同的排列方法。思路:1.首先,分成俩组,那么 1 2 3 和 4 5 6 这一组与 4 5 6 和 1 2 3这一组肯定是一样的。所以我们有C(n/2)/n 再除2 种选法。2.然后他们是围成一个圈,那么 1 2 3 4 与 2 3 4 1 与 3 4 1 2 与 4 1 2 3都是一样的。所以一个圈有(n/2)种 除n 种排法(因为是一个圈)。那么最后化简下来就是:n! / 2 / (n/2) /原创 2020-10-21 13:17:29 · 252 阅读 · 0 评论 -
Codeforces Round #673 (Div. 2) C. k-Amazing Numbers(思维,前缀和)
题目传送题意:给你n个数字,问每k个段的都存在的最小数字是多少?思路:存一下每一种数存在的位置,找出最小k使得这个数都在每一段中存在,然后前缀和求出最小值具体看注释AC代码#include <bits/stdc++.h>inline long long read(){char c = getchar();long long x = 0,s = 1;while(c < '0' || c > '9') {if(c == '-') s = -1;c = getchar()原创 2020-09-30 00:04:59 · 173 阅读 · 0 评论 -
Codeforces Round #665 (Div. 2) B. Ternary Sequence(思维,数学)
题目传送题意:给你a,b俩个数组,数组中只有0,1,2三种元素,a中有x1个0,y1个1,z1个2。b中有x2个0,y2个1,z2个2。现在你可以任意排列俩个数组,然后对应位进行如下操作合成c数组问最大的c数组的和是多少思路:我们先分析,哪些对答案有贡献。2 对 0 ,2 * 0 = 0,无贡献2 对 1 ,2 * 1 = 2,贡献22 对 2 , 贡献01 对 0 , 贡献01 对 1 , 贡献00对任何数也是0所以不难发现,对答案有贡献的只有2和1这一对所以我们贪心匹配:1原创 2020-08-22 11:27:46 · 194 阅读 · 0 评论 -
Codeforces Round #665 (Div. 2) A. Distance and Axis(思维,数学)
题目传送题意:给你一个点A(n,0),现在要求你找到一个整数x,使得abs(x - (abs(n-x)) == k,给出n和k,现在你可以进行操作n+1,或者n-1多次,问最少多少次操作使得有非负整数x的存在思路:1.当n都小于k的时候,那么在n前面找一个点使得上述等式成立那是必不可能的,所以我们只有将n一直加到k,然后x选择0即可2.当n大于x的时候,有等式x - (n-x) == k,(因为是对称的,所以这里我们直接假设x大于(n-k))那么化简得到x = (k+n)/2,要x为整数,当(k+原创 2020-08-22 10:50:58 · 206 阅读 · 0 评论 -
Codeforces Round #665 (Div. 2) C. Mere Array(数学)
题目传送题意:给你n个元素的数组,现在规定如果gcd(a,b) == Min(数组中的最小值),那么则可以交换a,b的值,现在问,是否能通过这个操作,使得数组不递减思路:1.我们先对改数组排个序,然后进行操作后的数组必须和现在排序后的数组一样。2.然后我们把没排序的数组与排了序的数组相对应,看看相同的位置上,那些数不同,那么不同的数的位置是肯定被交换了的。3.在这些肯定被交换了的数上,我们只需要判断gcd(a,Min) 是否等于Min即可。为什么这样判断呢?假设现在能交换乘不递减的数组,那么原创 2020-08-22 10:30:44 · 214 阅读 · 0 评论 -
Codeforces Global Round 10 D. Omkar and Bed Wars(思维,分块)
题目传送题意:n个人站成一圈,每个人有一个朝向(L或R)。每次操作可以改变一个人的朝向。输入每个人初始的朝向,输出至少经过多少次操作。使得一个人只被一个人攻击时,这个人与攻击他的人必须相互攻击,当一个人被俩个人同时攻击时,这个人可以任意攻击一个人思路:分块思想,先把连续的朝向相同的人分成一块一块的。如: RLLLLRRLLRLR分成: R | LLLL | RR | LL | R | L | R每一块的长度为len,则每一块需要改动的次数则为:len/3但是首尾相同的时候,要合并为一块计算原创 2020-08-18 22:05:58 · 248 阅读 · 0 评论 -
Codeforces Global Round 10 C. Omkar and Waterslide(思维)
题目传送题意:给你一个大小为n的数组,现在你可以进行操作,使得数组不递增。操作:你可以选择连续的子片段使得,他们的值加一,现在要求你求得最小的使用操作数,使得数组不递减思路:例:10 9 6 3 7 2 4 20我们先考虑这个例子,怎么使得其操作数最少呢?我们肯定是要把 9 6 3 7 2 4这一段变成10就是操作数最少的了再推:我们就要把6 3 7 2 4先变成 9再推:先把6 3 和 2 4变成 7再推:先把 3变成6,把2变成4这样的话我们就可以最大程度上的去利用连续的子段那么上原创 2020-08-17 11:03:10 · 395 阅读 · 0 评论 -
Codeforces Global Round 10 B. Omkar and Infinity Clock(数学)
题目传送题意:给你一个大小为n的数组a,还有一个正整数k,问进行k次操作后,数组是什么样,一次操作:对于每一个位置i 用数组中的最大值-ai替换思路:现在的数组中肯定是有一个最大值的,那么在一次操作后,Max(最大值)的位置一定会变成0,然后又会形成一个新的最大值,此时数组中肯定有Max和0的存在,然后进行操作后,Max变成0,0变成Max,继续下去这就是一个循环。例:5 -1 4 2 0第一次变0 6 1 3 5第二次变6 0 5 3 1第三次变0 6 1 3 5…这就是一个循环AC原创 2020-08-17 10:53:10 · 212 阅读 · 0 评论 -
Codeforces Global Round 10 A. Omkar and Password(思维)
题目传送题意:给你一个n大小的数组,你每次可以合并俩个不同的数,问最后你能把数组压缩到的最小长度是多少?思路:只有1和n的区别。什么时候为n呢?当所有数都是一样的时候,我们不能进行合并操作,如 5 5 5,那么长度一定只能是n什么时候为1呢?只要一个数组中有俩个数不同,那么一定可以合并到只有一个数,如何证明?证明:既然有不同的数,那么数组中肯定有一个最大值,和一个最小值,且最大值与最小值不等。那么我就先让目前的最大值和最小值合并,就会又形成一个最大值,那么这个最大值现在在数组中肯定是唯一原创 2020-08-17 10:37:21 · 326 阅读 · 0 评论 -
Codeforces Round #662 (Div. 2) C. Pinkie Pie Eats Patty-cakes (思维,分块)
题目传送题意:给你n个数,问你相邻俩个相同的数的最大最小距离是多少思路:我为什么写了个分块在标题上面呢?例:有数 1 1 1 2 2 2 3 3 3 4 4 5 6那么我们是如何分呢?1.我的方法是先统计相同的数的最多出现的次数(Max),和拥有相同Max的数的个数(sum)。2.这里Max = 3,sum = 3,那么我们肯定要使得这些数尽量的错开,也就是1 2 3 1 2 3 1 2 3这种错开(我称为把1 2 3 作为一块)3.这样做可以使得相同的数距离的最远,那么我们发现还有4 4原创 2020-08-08 22:05:36 · 238 阅读 · 0 评论 -
Codeforces Round #662 (Div. 2) A.Rainbow Dash, Fluttershy and Chess Coloring (思维)
题目传送思路:说实话想了挺久的。。。。答案为n/2 + 1那么我们来证明:首先:最开始,我们只能填最外围的一圈,而这最外围的一圈,无论n是多少,都要填俩次才能把最外围的填满,而在第二次的时候,我们不仅仅的填了最外围的一层,还往里面又填了一次,但是同理,这一次是填不完的,还需要再填一次,才能把这层填完,然后就依次下去,一层一层的填下去,就只有最外围的一层填了俩次,其他层都只用一次即可填满(而在最后一层,也就是只有一个方格的时候,这一次被上一层填满的时候就能填满了)而每一层之间的差距方格数差距为2,原创 2020-08-08 20:01:47 · 184 阅读 · 0 评论 -
Codeforces Round #662 (Div. 2) B.Applejack and Storages(思维)
题目传送题意:给你,n块木板,再q次询问的情况下(询问时会添加或者减少木板),问在当前询问下是否能使用现有的木板构成一个正方形和一个矩形(也可以是正方形)?构成的时候,每一条边是只能用一块木板思路:千万不要读错了,每一条边的构成只能用一块木板的那么我们现在只用记录现在有多少组木板长度一样的(4个为一组记为ans1),在除去前面的一组的情况下,还有多少组长度为一样的(2个为一组,记为ans2)如果ans1 >= 2 (能构成俩个正方形) 或者 ans1 == 1 && ans原创 2020-08-08 19:50:39 · 225 阅读 · 0 评论 -
Educational Codeforces Round 92 (Rated for Div. 2) C - Good String (思维)
题目传送题意:给你一个字符串,现在有俩种操作,一种是字符串所有位都向左平移一个单位,另一种是向右平移一个单位,现在要使得这个字符串俩种操作后的字符串还是相等的,问最少改动多少个字符?思路:既然要平移后的字符串还是完全相等的,那么可以得到:s[i-1] == s[i+1] (向右平移的和向左平移的),那么再推一下就可以得到只有俩种字符串是可以的:1111111 或者 2525252525(这种只能是偶数)那么由于是只有0到9的数字组成,那么当然也就20种情况,暴力跑一下就可以了AC代码#i原创 2020-07-30 22:02:18 · 286 阅读 · 0 评论 -
Educational Codeforces Round 92 (Rated for Div. 2) A.LCM Problem(思维)
题目传送题意:给你 l,r,让你求俩个数l <= x < y <= r ,并且l <= Lcm(x,y) <= r,思路:既然1求一个满足的,那么我们只用使得求出来的Lcm是最小的即可,最小为多少呢?就是 l 和 2l,如果r < 2l,那么就不成立AC代码#include <bits/stdc++.h>inline long long read(){char c = getchar();long long x = 0,s = 1;while(原创 2020-07-30 13:58:36 · 373 阅读 · 0 评论 -
Codeforces Round #659 (Div. 2) C. String Transformation 1(贪心,思维)
题目传送题意:给你俩个长度都为n的字符串a和b,现在每一次操作可以选定改变字符串a中的相同字符只要是相同的,都可以一起改变,或者选几个改变 ,但是只能变大,问你现在把a改变成b的最小操作数思路:首先明确一定,我们选择的字符串只能改大,不能改小。1.所以当字符串a中的对应位置的字符大于b中的时候,直接输出-12.那么当排除不可能的情况后,我们怎么操作能使得操作数最小呢?这里我们记录下每个字符需要改变到的字符,如aaa -> bcd 那么a要改3种: a-> b ,a-> c,a-原创 2020-07-25 20:26:47 · 313 阅读 · 0 评论 -
Codeforces Round #659 (Div. 2) A. Common Prefixes(思维,构造)
题目传送题意:给你一个n大小的数组,打印n+1个字符串,使得后一个字符串与前一个字符串的最长相同前缀长度对应于数组中的大小思路:贪心。我们先构造出一个200长的字符串(因为题目中的限制就是200)然后先打印出第一个字符串,第二个字符串则改动相应位置,使得最长前缀长度对应于数组中的值,然后依次下去AC代码#include <bits/stdc++.h>inline long long read(){char c = getchar();long long x = 0,s = 1;原创 2020-07-25 17:25:31 · 382 阅读 · 0 评论 -
Codeforces Round #658 (Div. 2) D. Unmerge(分块,背包dp)
题目传送思路:首先得观察到一个规律,如果某个数的后面紧跟着的数中有一段比他小的数,那么这一段数肯定是在一个数组中的,例: 5 3 1 4 2 10 7 8 9 6 ,那么可以分成三段 [5 3 1] ,[4 2] ,[10 7 8 9 6],那么分段有什么意义呢?我们知道了可以把这些段分出来,那么我们现在就可以把段自由组合一下,如果能组合成一个长度为n的数组,那么就成立了,如何自由组合?这很像背包dp,代价为段的长度,价值也为段的长度AC代码#include <bits/stdc++.h&g原创 2020-07-22 18:13:51 · 209 阅读 · 0 评论 -
Codeforces Round #658 (Div. 2) C.Prefix Flip(思维,贪心)
题目传送题意:给你俩个长度为n的二进制字符串a,b,现在你可以进行操作:翻转字符串a的任意前缀,(0变成1,1变成0),然后把翻转后的前缀再倒序,现在你最多有2*n次这个操作,让你打印怎么操作的,使得字符串a等于b思路:贪心一下,先把字符串a全部变成0或者1(至于是0还是1不重要) string a,b; cin >> a >> b; a = " " + a,b = " " + b; vector<int> v;原创 2020-07-22 15:15:23 · 182 阅读 · 0 评论 -
Codeforces Round #657 (Div. 2) B. Dubious Cyrpto (思维,数学)
题目传送题意:给定l , r , m 。让你求出等式中的a,b,c 。 m = n*a + b - c,其中n是任意的正整数,l <= a,b,c <= r思路:既然n是任意的正整数,那么我们直接枚举a的情况,再来判断b-c的情况。1.先在 l 到 r 的范围枚举a,那么这个时候的b-c有俩种情况就是n*a 或者 (n+1)*a,但是这里有个坑,就是n必须大于0,所以我们就得先判断(n+1)*a,因为这种情况一定是大于0的。2.那么我们a可以枚举,我们怎么判断b和c呢?就只用保证原创 2020-07-19 21:56:06 · 177 阅读 · 0 评论 -
Codeforces Round #656 (Div. 3) D. a-Good String(分治)
题目传送题意:给定一个字符串s,长度为偶数我们规定一个字符串叫做c-good,如果它满足以下任意一个条件:字符串长度是1,且包含字母c字符串长度大于1,左半边都是c,右半边为c+1-good字符串长度大于1,右半边都是c,左半边为c+1-goodc+1就表示字符 c+1 = d例:s="cdbbaaa"是一个a-good字符串它的右半边全是a;它的左半边"cdbb"是b-good a+1 = b ,因为:"cdbb"的右半边全是b;"cdbb"的左半边是c-good b+1 = c原创 2020-07-19 12:01:17 · 210 阅读 · 2 评论 -
Codeforces Round #656 (Div. 3) C. Make It Good(思维)
题目传送题意:给你一个数组,让你删除最少的前缀,使得删除后的数组,在只能把第一个元素或者最后一个元素添加到另外一个空数组情况下使得空数组添加后得到的数组递增排序。思路:我们先想如何能在删除前缀后,使得剩下的元素能满足在只添加第一个元素,或者最后一个元素的情况下使得另外那个添加的数组递增。那么只有一种情况是可能的,就是这个数组是直接先递增再递减的的这种,但是我们现在的删除前缀是不确定的,所以我们直接从后面开始枚举,先遍历到从后往前递减序列,一直遍历到不成立的那个点,然后再往前遍历递增的序列,再遍历到原创 2020-07-18 22:03:47 · 164 阅读 · 0 评论 -
Educational Codeforces Round 91 (Rated for Div. 2) D.Berserk And Fireball(思维,暴力破解,分情况)
题目传送题意:现在有一个排列,再给出一个删除后的数组,删除操作只有俩种:一种是,选择连续的k个数,删除,消耗x点代价。另一种是,选择连续的俩个数,删除其中小的数,消耗y点代价。现在问,能否得到删除后的数组,如果不能输出-1,如果能,请打出最小代价。思路:很明显就是分情况操作,先记录下,每个数的位置,然后在删除后的数组中对应起来,看删除的哪些数,枚举删除的数的最大值(这里要注意,因为区间不会重复,所以我们暴力枚举最大值,最坏也就总共2e5次操作),再看删除的这些数是否满足删除条件。1.如果y*k大于原创 2020-07-15 00:02:36 · 373 阅读 · 0 评论 -
Codeforces Round #655 (Div. 2) - C. Omkar and Baseball (思维)
题目传送题意:给你一个排列,让你用最少的次数重新排列使得其递增排布,重新排列的要求是,排列后,每个元素的位置都要与排列前不同思路:仔细想一下,其实无论怎样也就最多排俩次就够了(先排一次全部序列,使其位置与元素值都不同,然后再排一次就可以了)所以这里就分情况就可以了我们记录这个序列中有多少个位置的下标与元素值相等(用ans记录)1.如果ans == n,也就是全部都相同,那么这个序列就是递增的,输出0次2.如果ans == 0,那么就只用排一次,但是这里必须有个前提,例: 3 1 2 4,这原创 2020-07-12 10:10:22 · 353 阅读 · 0 评论 -
Codeforces Global Round 9 - D. Replace by MEX (暴力破解)
题目传送思路:咦,比赛的时候暴力写岔了一个地方,没写出来没有什么好讲的,暴力干就完事,题目中的k < 2n是迷惑人的,我直接暴力变成下面的数组,无论怎样都不会超过2n次我们直接把这个数组变成 0 1 2 3 4 5 6 … n-2 n-1 即可枚举目前的未出现的最小非负整数,然后添加到相应的位置,如果枚举出来的是n,那么我们就把他添加到一个i != arr[i]的位置即可AC代码#include <bits/stdc++.h>inline long long read(){原创 2020-07-06 18:59:23 · 235 阅读 · 0 评论 -
Codeforces Global Round 9 - A. Sign Flipping (思维,贪心)
题目传送题意:给你一个n大小的数组(n一定为奇数),现在你可以改变其中元素的符号,现在要求你在操作后,使得有至少一半的ai <= ai+1,至少有一半ai >= ai+1,现在让你构造出这个数组思路:我们直接正负正负的一直下去,由于n为奇数,那么肯定就满足条件了AC代码#include <bits/stdc++.h>inline long long read(){char c = getchar();long long x = 0,s = 1;while(c <原创 2020-07-05 10:42:02 · 446 阅读 · 0 评论 -
Codeforces Global Round 9 - B. Neighbor Grid(贪心)
题目传送题意:给你一个二维数组,现在要求二维数组中的每一个位置的元素值的多少都要对应于周围有多少个相邻的不为0的数的个数。现在你每次可以对二维数组的元素加一,问是否能构造出这样的二维数组。思路:既然没有规定操作的次数,那么我们何不直接把操作数拉到最大再看呢?我们直接构造成这种矩阵即可。但是我们现在的操作只能加上某个数,所以如果最开始的初始矩阵的位置上的元素值大于上面的对应位置的的元素值就无法构造AC代码#include <bits/stdc++.h>inline long lo原创 2020-07-05 10:34:23 · 399 阅读 · 0 评论 -
Codeforces Global Round 9 - C.Element Extermination (栈,贪心)
题目传送题意:给你n大小的数组排列,现在如果有俩个连续的数满足ai < ai+1,那么你可以删去其中的一个数,现在问:在进行上述操作后,是否有可能使得数组元素为1思路:分情况贪心:1.如果栈为空,那么直接把这个元素收入栈中2.如果现在输入的元素小于栈顶元素,那么执行不了删除操作,把现在输入的元素入栈3.如果现在输入的元素大于栈顶元素(满足操作删除条件)(1)如果现在的栈中元素个数为1,那么我们直接删除现在输出的元素(因为现在栈中的元素比较小,我们要把小的让出来,使其尽可能的去匹配后面的原创 2020-07-05 10:20:03 · 587 阅读 · 2 评论 -
Codeforces Round #654 (Div. 2) - D. Grid-00100 (思维,构造)
题目传送题意:给你k个1,让你构造出一个n*n的二维数组,使得数组中列和的最大值-列和的最小值的平方 + 行和的最大值 - 行和的最小值的平方最小。思路:要如何构造呢?肯定是每次把1添加到一列中和一行中1最少的位置。而我们怎么判断最小值是多少呢?我们想想其实只有0和2中俩种,因为按这种摆法最多也就是 最大值和最小值的差值为1。AC代码#include <bits/stdc++.h>inline long long read(){char c = getchar();lon原创 2020-07-02 11:24:38 · 254 阅读 · 0 评论 -
Codeforces Round #654 (Div. 2) - C.A Cookie for You (思维)
题目传送题意:给你一种糖数量为a和另一种糖数量为b,现在有俩种不同的人,人数分别为n和m。第一种人(有n个人)当a > b时会吃掉a中的一个糖果,反之吃b。第二种人当a > b 是会吃掉b中的糖果,反之吃a,现在问有没有一种排列方式使得这n+m个人都吃到糖果思路:分情况:1.当a+b < n+m时肯定不行(糖果没有人多)2.我们分析,第二种人每次吃的肯定是吃目前剩余最少的,第一种人每次肯定是吃最多的。如果m <= min(a,b)的话就可行,因为第一种其实不用照顾他,因原创 2020-07-02 11:17:30 · 353 阅读 · 0 评论 -
Codeforces Round #653 (Div. 3) C. Move Brackets(思维)
题目传送题意:给你一个括号序列,现在每一次,你能把一个括号移到最前面或者是最后面,现在问,最少移动几次,使得括号序列合法思路:我们先把匹配的序列去掉,那么剩下的就是不合法的,并且不合法的肯定是这种: “)))(((” “))((” “)))))(((((” 这种半分的情况,所以最少移动的次数就是剩下的不合法的括号数量的一半。AC代码#include <bits/stdc++.h>inline long long read(){char c = getchar();long l原创 2020-06-29 09:44:51 · 269 阅读 · 0 评论 -
Codeforces Round #653 (Div. 3) B.Multiply by 2, divide by 6(数学)
题目传送题意:给你一个数,现在你可以选择乘2或者除6(前提是能被6整除),现在问你最少需要多少次能使得操作后的数等于1?如果不可能输出-1.思路:我们直接分解这个数的因子,看他能被多少个2和3乘起来,因为只有因子全是2和3才有可能被6整除,并且2的因子个数不能多于3,因为我现在只能乘2,如果2的因子数多了的话,那么也是没有办法的,如果3多了的话,我们还可以乘2,使得2与3配对成6.AC代码#include <bits/stdc++.h>inline long long read()原创 2020-06-29 09:37:27 · 180 阅读 · 0 评论 -
Codeforces Round #653 (Div. 3) E1.Reading Books (easy version) (思维,sort)
题目传送题意:给你n本数,俩个人对这n本书有的喜欢,有的讨厌,现在问,这俩个人分别从他们喜欢的书中挑k本出来(如果挑不出来,输出-1),现在问每本书的最少阅读时间的总和为多少?思路:看清楚了是每本书的最少阅读时间总和,害的我最开始没有看懂第二个样例。。。1.我们开三个数组分别存储:俩个小孩都喜欢的书,第一个小孩喜欢的书,第二个小孩喜欢的书的所需要看的时间。2.再把时间从小到大排序,然后再分情况:(1)如果有一个人不能选k本书出来看,那么直接输出-1(2)如果俩个人都喜欢的书的花费时间 大于原创 2020-06-29 09:27:35 · 396 阅读 · 2 评论 -
Codeforces Round #653 (Div. 3) D. Zero Remainder Array(思维)
题目传送题意:给你一个n大小的数组和一个k,现在你有一个x为0,每一次,你可以使得x加上1,然后选择数组中的一个元素将其加上x(每个下标只能加一次),或者x只加1,而不进行其他操作,现在问,最少操作几次,使得数组中的元素都能被k整除?思路:1.关键在每一个元素只能加上一次,那么我们肯定就只能一步到位,而不是同一个位置加上很多次。2.既然是一步到位,那么肯定是要加的最多的那位是最大的操作次数,但是如果有俩个同时要加上2才能被k整除,那么有一个是不行的,因为2只能加上其中一个,所以这个其中一个数就要变原创 2020-06-29 09:11:51 · 351 阅读 · 0 评论 -
Codeforces Round #630 (Div. 2) D. Walk on Matrix (思维,二进制,位运算,构造,1700)
题目传送题意:现在给你一个错误的dp算法,现在让你给出一个矩阵,使得错误的算法与正确的答案相差k。思路:既然给的是错的,那就要想为什么他是错的(因为错误的算法里面,当前的最大值不一定是答案的最大值)。然后把错误的值给变成0(如果有可能,事实证明可行),再把正确的值变成k。有点抽象哈。。。我构造的矩阵:2^18-1 2^17 0k 2^17+k k//为什么要这样构造呢,按照错误的算法,肯定是选择2^17 & 2^17+k//得出的是2^17再位运算与k,那么错误的答案就是0了/原创 2020-06-27 18:32:40 · 155 阅读 · 0 评论 -
Codeforces Round #652 (Div. 2) A. FashionabLee(几何数学)
题目传送题意:给你一个n正多边形,现在问你,这个正多边形是否能同时至少有一条边平行x轴且还至少有一条边平行y轴?思路:这个其实想不出来也不要紧,举例就是,首先四边形满足,八边形满足,再看样例发现十二边形也满足,这样就好猜了。。。嘻嘻 ,只要n为4的倍数,那么就满足这样一个条件。下面举例观察下就很容易知道为什么了不知道你是否观察到了?正方形的x轴平行边和y轴平行边之间没有边连接。正八边形的x轴平行边和y轴平行边之间每一条之间都要有一条边连接所以多了四条边。再看正十二边形,每一条之间多了原创 2020-06-24 10:30:51 · 486 阅读 · 0 评论 -
Codeforces Round #652 (Div. 2) C. RationalLee(思维,sort)
题目传送题意:给你n个整数(一些数可能为负),分给k个人(输入中给出每个人分多少个整数),现在每个人得到的价值为分给自己的整数中的最大值加上最小值。现在问所有人的获得的价值的最大值为多少?思路:我们先把n个整数和k个人所分的数量从小到大排个序。1.现在我们要寻找这k个人中,有没有人只能得到一个整数,如果有的话,那么把最大的整数给他(因为他所能得到的价值是最大值的俩倍,所以最大的整数给他,对总体的价值肯定增长的越快)2.把所有的只能得到一个数的人分配完了后,我们再排个序,使得剩下的人中分配的整数数原创 2020-06-24 10:15:29 · 396 阅读 · 0 评论 -
Codeforces Round #652 (Div. 2) B. AccurateLee(思维)
题目传送题意:给你一个01字符串,现在你可以删除其中的一些子序列,要求如下:当遇到1 0的俩个连续子字符串后,可以删除其中的一个字符,现在要求把他删到尽量最短并且字典序最小,问最后删后的字符串是?思路:例:如果有这样的子结构:111110000那么肯定是只保留到最后一个0,这样会使得最短且字典序最小。又如1010001010100这个仔细想想会发现,其实也是保留最后一个0使得最短最小。那么再举几个例子就会发现,我们只要一个子结构的第一个字符为1,最后一个字符为0,那么中间的就都可以删掉。所以原创 2020-06-24 10:02:59 · 367 阅读 · 0 评论 -
Codeforces Round #651 (Div. 2) C.Number Game(博弈论)
题目传送题意:给你一个n,现在有俩个玩家轮流进行操作:操作1:把n除以n的奇数因子(可以包含他本身)操作2:把n减1.谁不能进行任何操作了,谁就输了,现在问,先手赢还是后手赢?思路:这种博弈论最好就是先一个一个枚举上去,讨论谁赢,然后找出规律总是把棘手的情况甩给对方例:当为1的时候,先手必输(因为他不能进行任何操作)当为2的时候,先手必赢(n减1后,后手不能拿了)当为3的时候,先手可以除3,然后后手不能拿了,所以先手赢当为4的时候,先手只能减1,然后后手除3后,后手就赢了当为5的时原创 2020-06-21 00:51:02 · 249 阅读 · 2 评论