![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Codeforces
文章平均质量分 55
Codeforces中文题解
ThXe
这个作者很懒,什么都没留下…
展开
-
Codeforces 中文题解(持续更新)
Codeforces近期比赛中文题解原创 2022-01-30 16:23:08 · 2335 阅读 · 0 评论 -
C. Make it Increasing
题目链接本题目的一个推论是:bi中有且仅有一个0证明:如果最终的数组是 b1, b2 … bn,那么如果存在 2≤i≤n,当 bi>0 且 bi−ai>bi−1 或 b1>0 时,则该解肯定是非最优的。 因为在 bi 或 b1 上有一个不必要的移动。同样,如果 bi<0 并且 bi+ai 或 bn<0,它也是非最优的。确定了这一点后,我们只要确定0的位置即可贪心的确认其它值。枚举每个位置为0,取其中答案的最小值。#include <bits/stdc++.h&g原创 2022-05-04 17:14:05 · 275 阅读 · 0 评论 -
B. Social Distance
原题链接假设当前排列为(p1,p2,p3…,pn)那么最终需要位置数为:max(p1,p2)+max(p2,p3)+...+max(pn−1,pn)+max(pn,p1)max(p_1,p_2)+max(p_2,p_3)+...+max(p_{n-1},p_n)+max(p_n,p_1)max(p1,p2)+max(p2,p3)+...+max(pn−1,pn)+max(pn,p1)我们可以采取一个贪心的策略,将p按照降序排列,这样可以得到上诉式子的下界。证明:交换pi,pi+1,其原创 2022-05-04 17:06:08 · 264 阅读 · 0 评论 -
A. Direction Change
题目链接首先我们可以默认为n>m(n小于m就交换它们两个的值),可以知道若没有不能相邻两个方向相同的限制,那么走到(n,m)点最短步数为(n+m-2),那么,从(1,1)点到(m,m)点采取策略下右,下右反复走,所需步数是(n+m-2)一定是最小的。那么现在考虑从(m,m)到(n,m),采取,下左下右,等价于每次向下走两步,但是需要多走两步无用功。所需(n-m)/2*4=2(n-m),若(n-m)为奇数数,需要多往下走一步。#include <bits/stdc++.h> usin原创 2022-05-04 16:49:32 · 384 阅读 · 0 评论 -
D. 388535
题意:对于题目给定的A序列,问是否有一个x可以将(0~r)的排列转变成A序列,即Ai=Bi^x题解:首先给出一个结论,对于一个排列(0-n)而言,第i位上0的个数一定大于等于1,如0-5:000001010011100101其次若x第i位上为1,我们会将0和1的数量互换1^0=11^1=0若x第i位上为0,将不会改变0和1的数量0^1=10^0=0所以我们得到如下算法:枚举每一位,统计0、1出现的个数,如果0的数量大于等于1该位上x的值为0,否则为1.void solve.原创 2022-04-05 11:00:36 · 688 阅读 · 0 评论 -
C. Shinju and the Lost Permutation
题意:对于一个排列P,它的力量被定义为不同数组B中不同种类的数的个数。其中Bi=max(p1,p2,…pi)如:P:[1,2,5,4,6,3]则B:[1,2,5,5,6,6] power=4,给定一个数组c,ci表示roate(i)的power问是否能够存在一个合法解。题解:如果出现数字1,代表该数为最大的数,所以1必须在c数组中 出现一次并且也只能出现一次。如果我们从1作为开始,每次旋转一个位置,种类数至多只会改变1。所以在此约束下我们可以完成本到题,更进一步,我们可以如此这般构造出一个合法排列.原创 2022-04-05 10:42:29 · 925 阅读 · 0 评论 -
B. Marin and Anti-coprime Permutation
B. Marin and Anti-coprime Permutation题意:构造一个排列满足题解考虑n等于2的时候gcd(1p1,2p2)容易想到最小的最大公约数为2,而且也只有可能为2.只要考虑二者的奇偶性与长度,当奇数与偶数个数不同时无解,否则将奇偶交错即可构造出一个合法方案。用乘法原理计数即可。1-n:奇 偶 奇 偶P:偶 奇 偶 奇#include<iostream>using namespace std;int main(){ int t; cin原创 2022-04-05 00:05:56 · 990 阅读 · 0 评论 -
A. Marin and Photoshoot
A. Marin and Photoshoot题意:插入最少的1使得任意长度大于2的连续子串中1的个数不少于0.题解:考虑最短不满足条件的字符串可能的形式:1.002. 010考虑使得每种情况都满足条件:00必须在中间插入两个1才能满足条件,00->0110010在中间插入一个1满足条件 ,010->0110所以满足题目要求的合法构造是,任意两个0之间需要至少两个1,没有就需要补上。#include<iostream>using namespace std;原创 2022-04-04 23:54:54 · 511 阅读 · 0 评论 -
CF-CodeTon Round1-D.K-good
题意将一个数分为k个数的和,其中k个数%k互不相等。题解n 是 k-good 当且仅当:条件1:n≥1+2+…+k=k(k+1)2。(如果连续最小的k个数都比当前的数大,那么当然不可以了)条件2:n≡1+2+…+k≡k(k+1)2(modk)。先考虑满足k个数%k互不相等的构造方法:连续的整数%k一定互不相同。那么我们可以构造出公式:n=(1+k)k/2+mk(这里的m*k的意思是把其中m项都加上k)将分式两边同乘2并提取公因式:2n=(1+k)k+2mk=k(1+k+2*m)这里可以发.原创 2022-04-02 17:37:47 · 902 阅读 · 0 评论 -
Codeforces Round#772(Div.2) C. Differential Sorting
题目给定一个包含 n 个元素的数组 a。您最多可以执行以下操作 n 次:选择三个索引 x,y,z (1≤x<y<z≤n) 并将 ax 替换为 ay−az。手术后,|ax|必须小于 1018。您的目标是使结果数组不递减。如果有多个解决方案,您可以输出任何一个。如果不可能实现,您也应该报告它。输入每个测试包含多个测试用例。第一行将包含一个整数 t (1≤t≤10000)——测试用例的数量。然后是 t 个测试用例。每个测试用例的第一行包含一个整数 n (3≤n≤2⋅105) — 数组 a原创 2022-02-21 21:56:39 · 298 阅读 · 1 评论 -
Codeforces Round#772(Div.2) B. Avoid Local Maximums
题目给定一个大小为 n 的数组 a。此数组中的每个元素都是 1 到 109 之间的整数。您可以对该数组执行多项操作。在操作期间,您可以将数组中的元素替换为 1 到 109 之间的任何整数。输出所需的最小操作数,以使结果数组不包含任何局部最大值,以及操作后的结果数组。如果元素 ai 严格大于它的两个相邻元素(即 ai>ai-1 和 ai>ai+1),则它是局部最大值。由于 a1 和 an 每个只有一个邻居,因此它们永远不会是局部最大值。输入每个测试包含多个测试用例。第一行将包含一个整数原创 2022-02-21 21:49:49 · 280 阅读 · 0 评论 -
Codeforces Round#772(Div.2) A. Min Or Sum
题目给定一个大小为 n 的数组 a。您可以对阵列执行以下操作:选择两个不同的整数 i,j (1≤i<j≤n),将 ai 替换为 x,将 aj 替换为 y。 为了不破坏数组,必须保持 ai|aj=x|y,其中 | 表示按位或运算。 请注意,x 和 y 是非负整数。请输出使用上述操作任意次数后可以得到的数组的最小和。输入每个测试包含多个测试用例。 第一行包含测试用例的数量 t (1≤t≤1000)。 测试用例的描述如下。每个测试用例的第一行包含一个整数 n (2≤n≤100) — 数组 a原创 2022-02-21 21:44:43 · 525 阅读 · 0 评论 -
Codeforces Round#770(Div.2)D. Finding Zero
题目这是一个交互问题。我们选择了一个整数数组 a1,a2,…,an (0≤ai≤109) 并在其中隐藏了一个零!你的目标是找到这个零的位置,也就是找到 i 使得 ai=0。您可以进行多次查询以猜测答案。对于每个查询,您可以想出三个不同的索引 i,j,k,我们将告诉您 max(ai,aj,ak)−min(ai,aj,ak) 的值。换句话说,我们将告诉您 ai、aj 和 ak 中最大和最小数之间的差异。您可以进行不超过 2⋅n−2 次查询,然后您有两次尝试猜测零在哪里。也就是说,你必须告诉我们两个数字原创 2022-02-18 17:15:20 · 194 阅读 · 0 评论 -
Codeforces Round#770(Div.2) C. OKEA
题目你为一家知名百货公司工作,该百货公司使用领先的技术并采用机械工作——即机器人!你工作的部门销售 n⋅k 件商品。第一件物品花费 1 美元,第二件物品花费 2 美元,依此类推:第 i 件物品花费 i 美元。这些物品位于货架上。这些物品形成一个矩形网格:总共有 n 个架子,每个架子正好包含 k 个物品。我们将用 ai,j 表示第 i 个货架上第 j 件商品(从左数起)的价格,1≤i≤n,1≤j≤k。有时机器人会好奇并思考以下问题:对于某些货架 i 和索引 l≤r,物品ai,l,ai,l+1,...,a原创 2022-02-18 17:10:00 · 214 阅读 · 2 评论 -
Codeforces Round#770(Div.2) B. Fortune Telling
题目你的朋友爱丽丝和鲍勃练习算命。算命如下进行。有一个众所周知的数组 a,其中包含从 1 到 n 索引的 n 个非负整数。受托人从某个非负数 d 开始,并按照 i 的递增顺序对每个 i=1,2,…,n 执行两个操作之一。可能的操作是:用 d+ai 替换他们当前的数字 d用 d⊕ai 替换它们当前的数字 d(以下⊕表示按位异或运算)请注意,对于不同的 i 和不同的人,所选择的操作可能会有所不同。有一次,Alice 决定从 d=x 开始,而 Bob 从 d=x+3 开始。他们每个人都算命,最后得到了原创 2022-02-18 17:00:09 · 210 阅读 · 0 评论 -
Codeforces Round#770(Div.2) A. Reverse and Concatenate
题目给定一个长度为 n 的字符串 s 和一个数字 k。让我们用 rev(s) 表示反转的字符串 s(即 rev(s)=sn−1…s1)。您可以对字符串应用以下两种操作之一:用 s+rev(s) 替换字符串 s用 rev(s)+s 替换字符串 s由于对原始字符串 s 执行恰好 k 个操作(可能是不同种类的操作),您可以获得多少个不同的字符串?在该语句中,我们将字符串 s 和 t 的连接表示为 s+t。换句话说,s+t=s1s2…snt1t2…tm,其中 n 和 m 分别是字符串 s 和 t 的长度。原创 2022-02-18 16:54:30 · 339 阅读 · 0 评论 -
Educational Codeforces Round 122E. Spanning Tree Queries
给定一个连接的加权无向图,由 n 个顶点和 m 个边组成。你被问到关于它的 k 个问题。每个查询由一个整数 x 组成。对于每个查询,您可以在图中选择一个生成树。令其边的权重为 w1,w2,…,wn−1。生成树的代价是 ∑i=|wi−x| (权重和 x 之间的绝对差之和)。查询的答案是生成树的最低成本。查询以压缩格式给出。第一个 p (1≤p≤k) 查询 q1,q2,…,qp 是明确提供的。对于从 p+1 到 k 的查询,qj=(qj−1⋅a+b)q_{j}=(q_{j−1}⋅a+b)%cqj=(qj−原创 2022-02-12 16:59:20 · 343 阅读 · 1 评论 -
Codeforces Round#768(Div.2)A-F
A. Min Max Swap题意给定两个数组a、b,可以任意的交换ai 、bi。使得max(a1,a2,…,an)⋅max(b1,b2,…,bn) 的值最小题解:1.从全局来考虑,由于只是改变次序,并不会改变值得大小,最终答案是a数组最大值乘上b数组最大值,设ans=m1*m2.那么乘积中的一个数一定是两个数组中的最大值。即m1=max(a1,a2,…,an,b1,b2,…,bn).2.固定m1后,让ans最小只需要让m2最小,那么我们可以把较大的值都放在一个数组里,把较小的数放在一个数组里即可原创 2022-02-09 22:09:57 · 305 阅读 · 0 评论 -
Educational Codeforces Round 122 D. Make Them Equal
题目你有一个大小为 n 的整数数组。 最初,数组的所有元素都等于1。可以执行以下操作:选择两个整数i(1≤i≤n)和x(x>0),然后将ai的值增加⌊aix⌋( 即使 ai=ai+⌊ai/x⌋)。执行完所有操作后,您将收到 ai=bia_{i}=b_{i}ai=bi 的所有 i 的 cic_{i}ci 币。您的任务是通过执行不超过 k 个操作来确定您可以接收的最大硬币数量。题解让我们计算 did_{i}di——从 1 得到数字 i 的最小操作数。为此,使用 BFS 或动态规划就足够了原创 2022-02-09 21:49:33 · 755 阅读 · 0 评论 -
Educational Codeforces Round 122 C. Kill the Monster
题目Monocarp 正在玩电脑游戏。在这个游戏中,他的角色与不同的怪物战斗。角色和怪物之间的战斗如下。假设角色最初有生命值 hC 和攻击力 dC;怪物最初有生命值 hM 和攻击 dM。战斗包括几个步骤:角色攻击怪物,使怪物的生命值降低 dC;怪物攻击角色,使角色的生命值降低 dM;角色攻击怪物,使怪物的生命值降低 dC;怪物攻击角色,使角色的生命值降低 dM;以此类推,直到战斗结束。当某人的健康状况变为非正数(即 0 或更少)时,战斗结束。如果怪物的生命值变为非正数,则角色获胜,否则怪物获原创 2022-02-09 21:43:06 · 512 阅读 · 0 评论 -
Educational Codeforces Round 122 B. Minority
题目给你一个字符串 s,只包含字符 ‘0’ 和 ‘1’。您必须选择 s 的连续子字符串并从子字符串中删除所有出现的字符,这是其中的严格少数。也就是说,如果子字符串中“0”的数量严格小于“1”的数量,则从子字符串中删除所有出现的“0”。如果“1”的数量严格小于“0”的数量,则删除所有出现的“1”。如果两者数量相同,则什么也不做。您必须只应用一次操作。最多可以删除多少个字符?输入第一行包含一个整数 t (1≤t≤104)——测试用例的数量。每个测试用例的唯一行包含一个非空字符串 s,仅由字符 ‘0原创 2022-02-09 18:04:30 · 346 阅读 · 0 评论 -
Educational Codeforces Round 122 A. Div. 7
题目给你一个整数 n。 您必须更改其中的最小位数,使得结果数字没有任何前导零并且可以被 7 整除。如果有多种方法可以做到这一点,请打印其中任何一种。 如果给定的数字已经能被 7 整除,则保持不变。输入第一行包含一个整数 t (1≤t≤990)——测试用例的数量。然后是测试用例,每个测试用例由一行组成,其中包含一个整数 n (10≤n≤999)。输出对于每个测试用例,打印一个不带任何前导零的整数——更改的结果(即可以被 7 整除的整数,可以通过更改 n 中的最小可能位数来获得)。如果有多种方法原创 2022-02-09 17:56:23 · 546 阅读 · 0 评论 -
Codeforces Round#769(Div.2)E1+E2 Distance Tree
题目树是无环的连通无向图。加权树具有分配给每条边的权重。两个顶点之间的距离是连接它们的路径上的最小权重之和。给定一棵具有 n 个顶点的加权树,每条边的权重为 1。将 d(v) 表示为顶点 1 和顶点 v 之间的距离。如果可以在任意两个顶点 a 和 b (1≤a,b≤n) 之间临时添加一条权重为 x 的边,则令 f(x) 为 max{d(v),1<=v<=n} 的最小可能值。请注意,经过此操作后,图不再是树。对于从 1 到 n 的每个整数 x,求 f(x)。输入第一行包含一个整数 t原创 2022-02-09 12:26:03 · 737 阅读 · 0 评论 -
Codeforces Round#769(Div.2) D. New Year Concert
题目新年快到了,这意味着在179学校,音乐会的准备工作正在如火如荼地进行。学校有n个班,从1到n编号,第i班准备了一个长度为ai分钟的场景。作为负责举办音乐会的主要负责人,Idnar 知道,如果一场音乐会有 k 个场景,长度为 b1, b2, …, bk 分钟,那么如果存在两个整数 l 和 r 使得 1≤l≤ r≤k 且 gcd(bl,bl+1,…,br−1,br)=r−l+1,其中 gcd(bl,bl+1,…,br−1,br) 等于最大公约数数字 bl, bl+1, …, br−1, br 的除数原创 2022-02-08 20:08:00 · 556 阅读 · 0 评论 -
Codeforces Round#767(Div.2) F2. Game on Sum (Hard Version)
题目参考F1仅有输入数据范围修改:输入的第一行包含一个整数 t (1≤t≤105) — 测试用例的数量。 测试用例的描述如下。每个测试用例由一行包含三个整数 n、m 和 k (1≤m≤n≤106,0≤k<109+7) — 回合数,Bob 必须加多少个数 和 Alice 可以选择的最大数。保证所有测试用例的 n 总和不超过 106。题解:由F1我们知道DP状态转移方程为DP[i][0]=0DP[i][i]=k⋅i并且转换DP[i][j]=(DP[i-1][j-1]+DP[i-1][j原创 2022-02-08 13:40:24 · 248 阅读 · 0 评论 -
Codeforces Round#767(Div.2) F1. Game on Sum (Easy Version)
题目Alice 和 Bob 被赋予数字 n、m 和 k,并进行如下游戏:游戏有一个分数,爱丽丝试图最大化,而鲍勃试图最小化。分数最初为 0。游戏由 n 轮组成。每一轮,Alice 都会从 0 到 k(含)中选择一个实数,Bob 将其加上到游戏得分中或从游戏得分中减去。但在整个游戏过程中,Bob 必须选择在 n 轮中至少加上 m 个。Bob 在决定是否从分数中添加或减去数字之前知道 Alice 选择了哪个数字,并且 Alice 在选择当前回合的数字之前知道 Bob 是添加还是减去了前一回合的数字(除了第原创 2022-02-08 13:22:23 · 1881 阅读 · 0 评论 -
Codeforces Round#767(Div.2) E. Grid Xor
题目:注:集合{s1,s2,…,sm}的异或和被定义为s1⊕s2⊕…⊕sms_1⊕s_2⊕…⊕s_ms1⊕s2⊕…⊕sm,其中⊕ 表示按位异或运算。在赢得IOI后,维克多给自己买了一个n×n的网格,每个单元格中都包含整数。n是一个偶数。第i行和第j列单元格中的整数为ai,ja_{i,j}ai,j。不幸的是,Mihai从Victor那里偷走了网格,并告诉他,他将只返回一个条件:Victor必须告诉Mihai整个网格中所有整数的异或和。Victor不记得网格的所有元素,但他记得一些关于它的信息:原创 2022-02-08 13:02:16 · 353 阅读 · 0 评论 -
Codeforces Round#769(Div.2) C. Strange Test
题意给定两个数,A-B,一共有三种操作1.A=A+1;2.B=B+1;3.A=A|B;问使得A=B的最小操作步数。题解:由于第一种操作和第二种操作不可能同时使用,所以要么是A++=B,要么是A++然后或为B,不然就是,用第三种操作使得A>=B,然后B++使得A=B(此时B为B变化后的值)#include<bits/stdc++.h>using namespace std;const int N = 2e5 + 10, mod = 1e9 + 7;typedef lon原创 2022-02-07 14:23:52 · 498 阅读 · 0 评论 -
Codeforces Round#769(Div.2) B. Roof Construction
题意给定一个0至n-1的全排列,一个排列的消耗为数字与其相邻的异或,问如何排列能使消耗最小,并给出排列。题解我们首先来考虑消耗最小能是多少,异或的特点是相同为0,不同为1,考虑最高位的1,无论如何放置,无法使得最高位1的附近没有最高位为0,比如说 000 ,001,010,011,100,101,110,111我们将最高位为1的放在最左边,由于不能放最高位为0的,那我们依次从左到右区放置,最后一定有个最高位为1的的右边为0,所以答案无法比最高位1更小。所以最小消耗,假定是n为10,那么最高位k=3,原创 2022-02-07 13:53:47 · 691 阅读 · 0 评论 -
Codeforces Round#769(Div.2) A. ABC
题意给定一个01串,可以任意排列顺序,问是否能够使得子串中不存在长度大于1的回文串。题解由于可以任意排列,所以长度与01数量一定时只要有一种情况为YES答案为YES长度为1时,答案一定是YES长度为2时,共有4种情况 0 0,0 1,1 0, 1 1,其中1、4为NO长度为3时,共有8种情况 0 0 0,0 0 1,0 1 0,0 1 1,1 0 0,1 0 1,1 1 0,1 1 1可以发现无论怎样排列一定为NO,所以结论为长度大于等于3为NO,长度为2且两个字符一样时为NO,其余为YES#原创 2022-02-07 13:38:03 · 356 阅读 · 0 评论 -
Codeforces Round#767(Div.2) A. Download More RAM
题意:给你一个初始的运行内存,每个硬盘有运行内存和运行完后可以获得的内存,也就是运行完一个你可以运行的内存后你会获得一些内存,比如初始内存为 10,一个硬盘的运行内存为10,可获得内存为20,运行完后你就变成30的内存,你只能运行运行内存小于你当前的值的硬盘。题解结构体排序,把运行内存小的放在前面然后依次运行累加即可。#include<bits/stdc++.h>using namespace std;typedef unsigned long long ll;const int原创 2022-01-30 20:15:50 · 407 阅读 · 0 评论 -
Codeforces Round#768(Div.2) F. Flipping Range
题解:如果我们有x、y∈B(假设x>y),等价于拥有一个x-y大小置入B中,方法是乘以从大小为 x-y 的区间的位置开始的大小为 x 的区间,和一个大小为 y 的区间,结束于与区间 x 相同的位置.或者,将一个大小为 x 的区间与大小为 x−y 的区间在相同位置结束的区间与另一个大小为 y 的区间相乘,该区间的起点与大小为 x 的区间相同。对于两个元素 x,y∈B(x>y),可以将 x−y 添加到 B,重复这样做可以得到 gcd(x,y).让 g=gcd(b1,b2,…,bm:bi∈原创 2022-01-30 19:54:39 · 638 阅读 · 0 评论 -
Codeforces Round#768(Div.2) E. Paint the Middle
题意:给定编号从 1 到 n的 n 个元素,元素 i 具有值 ai 和颜色 ci,最初,对于所有 i,ci=0。可以应用以下操作:选取三个元素i、j、k(1≤i<j<k≤n),使得ci、cj、ck都等于0且ai=ak,则令cj =1。问max∑cimax\sum cimax∑ci为多少题解:可以将这题看成区间覆盖的问题,只要两头有个相同的数显然可以将中间所有的ci变为1.所以我们只需要预处理所有的数出现最后一次的位置,然后判断当前的i是否在这个以a[i]为左端点的区间内,如果是则答案原创 2022-01-30 18:15:23 · 947 阅读 · 0 评论 -
Codeforces Round#768(Div.2) D. Range and Partition
题意给定一个数组,将这个数组分为k块,每一块要求在区间[x,y]内的数都要多于在区间外的数。求一个[x,y]使得y-x值最小,并输出k个区间的左右端点。题解我们先分析一下题意,找到我们需要解决的问题,以及问题中相互牵制的条件。寻找到一个范围[x,y],当范围大时显然我们可以任意分割数组,只要满足有k个区间即可。但是题目要求区间范围最小,范围小的话我们就不一定能满足分割出k个区间来提示1:专注于如何解决固定区间 [x,y] 的问题。提示2:将区间内的数字视为 +1,将其他数字视为 -1提示3原创 2022-01-30 16:49:27 · 1288 阅读 · 3 评论 -
Codeforces Round#768(Div.2) A. Min Max Swap
题意给定两个数组a、b,可以任意的交换ai 、bi。使得max(a1,a2,…,an)⋅max(b1,b2,…,bn) 的值最小题解:1.从全局来考虑,由于只是改变次序,并不会改变值得大小,最终答案是a数组最大值乘上b数组最大值,设ans=m1*m2.那么乘积中的一个数一定是两个数组中的最大值。即m1=max(a1,a2,…,an,b1,b2,…,bn).2.固定m1后,让ans最小只需要让m2最小,那么我们可以把较大的值都放在一个数组里,把较小的数放在一个数组里即可得到最终的答案。代码:#in原创 2022-01-29 22:57:20 · 544 阅读 · 0 评论 -
Codeforces Round#768(Div.2) B. Fun with Even Subarrays
题意给定一个数组,每次可以选择两个值分别作为起点和复制长度,l,k。For 例如a=[2,1,3,4,5,3],选择l=1,k=2,然后a[1]=a[3],a[2]=a[4],a=[3,4,3,4,5,3].问最少需要几步可以使得a中所有数字都相同题解1.尝试思考最终的数组是任意的吗?还是有个固定的值?我们可以发现最后一个值是没法动的,所以要让数组变成所有值都一样那么最终数组的值是一定的,就是最后一个值a[n]。2.怎么样让步数最少?因为选择l、k是没有额外花费的,所以尽量选择较长的一段相同的a原创 2022-01-29 23:05:51 · 698 阅读 · 0 评论 -
Codeforces Round#768(Div.2) C. And Matching
题意:给定一个值n,表示数组为[0-n-1],其中n一定是2的整数幂,将数字两两配对分别为a[i],b[i],使得∑ai&bi=k\sum a_{i} \&b_{i}=k∑ai&bi=k,题解:1.直接构造出一个答案为k,使得剩下的组合都为0即可。我们知道:n-1&k=k设c(k)为k的补码, k&c(k)=0再分情况讨论:Case 0<=k<n−1:在这种情况下,可以将除 0、k、c(k) 和 n-1 之外的每个元素与其补码配对原创 2022-01-29 23:24:10 · 420 阅读 · 0 评论 -
Codeforces Round#767(Div.2) B. GCD Arrays
题意给定一个l,r代表数组中的元素的值是l-r。如:(1,6)[1,2,3,4,5,6],每次操作可以选择两个数从数组中移除,并将二者的乘积置入数组中,问能否在k次操作内使得整个数组的最大公约数大于1.题解首先从数组全局来考虑,移除两个数并置入它们的乘积,并不会改变这总的因子情况,而改变的是一个将两个数的因子合并成一个新数。为了使整个数组最大公约数大于1,那么数组中每个数都应该有相同的因子。那显然初始数列每个数拥有相同因子最多的数,就是能够用最少次数使得整个数组最大公约数大于1的公约数。容易联想到2这原创 2022-01-25 13:13:28 · 321 阅读 · 0 评论 -
Codeforces Round#767(Div.2) C. Meximum Array
题意对于一个数列,输出字典序最大的MEX数串。题解由于需要字典序最大,其实思路就很明显了,我们需要将越大的数放在前面,那我们只要计数排序下一个数字是否在数组中存在,然后在用一个set来维护当前已经在数组中的数即可。#include<bits/stdc++.h>using namespace std;typedef unsigned long long ll;const int N = 2e5 + 10;int cnt[N],a[N],st[105];void solve()原创 2022-01-25 13:20:23 · 388 阅读 · 0 评论 -
Codeforces Round#767(Div.2) D. Peculiar Movie Preferences
题意给一堆长度小于等3的字符串,如果过程中能任意跳过字符串,是否存在一种方案让剩余的字符串为回文串。题解可以证明只需要考虑两个字符串片段能否组成一个回文串片段即可。假设有一个字符串是由三个以上片段组成,我们来考虑它的长度组合?首先如果一个字符串长度为1那它自回文所以不考虑。那么三个字符串可能为,3 3 3,3 3 2,3 2 3,3 2 2 ,2 3 3,2 2 2,2 2 3.假如这个字符串回文,我们可以发现把中间一个回文串去掉,剩下的字符串也可也回文,所以我们只需要考虑两个字符串是否能够组成回文串原创 2022-01-25 13:31:36 · 692 阅读 · 0 评论