
构造
文章平均质量分 83
CCloth
这个作者很懒,什么都没留下…
展开
-
[构造]ConstructOR Codeforces1748D
先考虑下什么时候无解,设d的二进制表示下最后一个1的位置是d1,a的二进制表示下最后一个1的位置是a1,b的二进制表示下最后一个1的位置是b1,如果a1 < d1或者b1 < d1那就无解,这是因为d的倍数的最后一个1的位置一定不会小于d1,假设d乘倍数k以后,将k拆成二进制表示,然后再和d相乘,其实可以看出d*k这个结果和d进行若干次左移操作然后加和是一样的,所以d*k的最后一个1的位置不会小于d1。因为每次都加的是d*某个2的幂次,所以最终x一定是d的倍数,并且还能覆盖上c的每一个1。原创 2022-12-31 19:15:09 · 852 阅读 · 0 评论 -
[构造]Range = √Sum Codeforces1758D
首先先考虑n为偶数情况下,可以发现这时候取[n/2, n)和(n, 3*n/2]区间内的n个数字,正好可以凑成一个符合题意的数组。对于n为奇数的情况,可以先按照偶数情况进行构造,比如对于n = 5时,先按照n = 6进行构造,得到3 4 5 7 8 9,然后其中一定会存在一个n-1,将这个n-1删掉,此时还剩下n-1个数字,让这n-1个数字都加1,保证数组加和不变,这时候就构造出来一个符合题意的数组了。给出一个整数n,要求构造一个长度为n的数组,并且这个数组中的最大值-最小值等于整个数组加和的开根号。原创 2022-12-31 11:59:30 · 542 阅读 · 0 评论 -
[构造]Another Array Problem Codeforces1763C
n等于2时,其实就两种情况,要么不操作,要么操作,答案就是max(a[1]+a[2], 2*abs(a[1]-a[2]))。n等于3的时候麻烦一些,但也就三种情况,要么不操作,要么让两侧元素复制为三份,要么让abs(a[1]-a[2])或abs(a[3]-a[2])复制为三份。有一个数组a,你可以进行若干次操作,每次操作选择其中两数字ai和aj,令ai~aj全部变成abs(ai-aj),问最终整个数组加和的最大值。原创 2022-12-30 22:29:38 · 220 阅读 · 0 评论 -
[构造]Repetitions Decoding Codeforces1642D
如果数组中某数出现次数为奇数,那此时一定无解,因为无论作多少次操作该数出现次数仍然是奇数次,存在出现奇数次的数时是不可能符合题意的。遍历原数组,对于a[i]向后找第一个等于a[i]的位置j,此时依次在j位置后面添加a[i+1], a[i+2], ......, a[j-1],也就是将a[i]到a[j-1]作为平方串中的第一段,第二段通过加数操作生成,以此类推直到遍历完整个数组,由于每个位置最多向后遍历n次,且每次最少也会前进一个位置,所以总时间复杂度为O(n^2)。原创 2022-10-31 21:41:31 · 422 阅读 · 0 评论 -
[构造]Make Nonzero Sum Codeforces1754C
考虑每次都构造长度为2的区间,如果num > 0,那说明贡献太大了,需要让贡献减少,有三种区间会让总贡献减少,分别是[1, 1],[-1, 1],[0, 1],并且都使总贡献减少了2,所以只需要在原数组中找到num/2个不相交的数对(x, y),满足y == 1即可,剩下的位置都各自成段即可。给出长度为n的数组,在easy版本中仅由1和-1构成,在hard版本中仅有1、-1和0构成,现在可以将该数组划分成若干段,每段的贡献为a[1]-a[2]+a[3]......,问如何分段使所有段权值加和为0。原创 2022-10-23 18:11:24 · 480 阅读 · 0 评论 -
[构造]Reverse Sort Sum Codeforces1659D
通过对第一个非零的数进行扩展可以将答案向后填若干位,然后再对pos+1位置进行扩展,同样可以将答案向后填若干位,以此类推就能将答案填满。另外由于在不断排序的过程中开头0的个数是不减的,所以在一个固定的位置上其数字变化一定是+0 若干次,+1若干次到达a[i],然后再+0若干次,而从不断+1过渡到不断+0的时刻,一定是该位置前面全是0的时刻,所以只要知道一个位置pos开始不断+1的时刻,就能知道其终止+1开始+0的时刻t,而这时就能确定前t个数中必须恰好有pos个0存在,这样才能终止其不断+1。原创 2022-10-18 18:29:25 · 231 阅读 · 0 评论 -
[构造]Parity Shuffle Sorting Codeforces1733C
一开始以为要操作次数最小,后来发现题目中说不必最小,只需要构造出一个解就行了,那其实这道题就很简单了,先对第一个数和第n个数操作,这时两者数值一定相同,设其为x,之后对于第2到第n-1个数字,如果x+ai为奇数,那么让它和第一个数操作,否则和第n个数操作,这样经过n-1次操作可以将数组转化为n个x。给出一个数组,可以对其进行最多n次操作,每次操作选择两个位置l和r,若al+ar为奇数则ar = al,否则al = ar,用这些操作构造出一个不减的数组。原创 2022-09-22 07:33:15 · 243 阅读 · 0 评论 -
[构造]Build Permutation Codeforces1713C
i等于6时可以直接把a[3]~a[6]都填完,之后i等于2,这时候的k-i是否一定小于3呢,实际上这是一定的,因为要比较的其实就是k-i是否小于i+1(仔细观察),而k-i已知是小于等于i的,所以这就证明了不会填入之前已经填过的数字,保证答案是一个排列。观察第三个样例可以发现,构造方法就是从后往前构造,对于位置i需要找到一个不小于i的平方数k,然后填入k-i,而之前的位置就可以递增地去填了,直到填到n为止,然后接下来的过程类似,这样是一定可以构造出一个解的。原创 2022-09-13 07:48:47 · 213 阅读 · 0 评论 -
[构造]Array 2022牛客多校第6场 A
接下来就是具体构造了,显然可以对a进行排序,从小到大放入数字会更方便,初始化j = 1,然后枚举ai,为了简单起见待放入的值也用ai表示,如果cj为0那说明该位置可以放入ai,于是可以cj = ai, c(j+ai) = ai, ......, c(j+k*ai) = ai,否则将j++,持续这个过程直到遍历完a数组,由于一定有解所以每次j总能找到一个0位置,而且这个0的位置一定小于等于ai。最终就是输出c数组就行了,不过ci为0的位置直接输出1即可,时间复杂度为O(n+m)。......原创 2022-08-08 11:35:04 · 176 阅读 · 0 评论 -
[构造][打表]Link with Monotonic Subsequence 2022牛客多校第2场 G
一开始刚看到这题是想着随便找找规律构造几个特殊的全排列,后来发现之前构造的是错的,于是可以写一个打表,把符合要求的全排列都打出来,通过打表可以发现这个题目要求的值与根号n有关,也就是说LIS和LDS长度均小于等于根号n上取整,所以根据这点可以猜想出来一种构造方法,那就是按照根号n来分块,每块长度为根号n,块内就是一个递减序列,块间构成递增序列,以n=9为例就是这样的321654987。...原创 2022-07-23 19:53:26 · 303 阅读 · 0 评论 -
[构造]Palindromic Numbers CF1700B
During a daily walk Alina noticed a long number written on the ground. Now Alina wants to find some positive number of same length without leading zeroes, such that the sum of these two numbers is a palindrome.Recall that a number is called a palindrome, i原创 2022-07-06 22:42:27 · 273 阅读 · 0 评论