
codeforce
文章平均质量分 59
NONE-C
24届双非本,自动驾驶算法工程师
勿忘初心:做有挑战的事
展开
-
Codeforces Round #804 (Div. 2) D. Almost Triple Deletions time limit per test2 seconds (dp好题)
DP好题给定一个长度为n的数组,其中可以通过一个操作使得相邻的两个不同的数移除序列,求经过任意次操作后,最终该序列最大能有多少个相同的数剩余。赛场上拿到这道题,想到了以下几点:对于一段序列,只有当该段序列中出现最多次数的数的次数小于整体一半,那么该段数便可以消去。于是赛场上便开始对这道题开始疯狂贪心。在快结束时,想到n2n^2n2可以去枚举i,j之间的消去性然后转移,到此比赛也结束了。赛后看了大佬的代码,确实,就是将以上两点结合起来,就可以dp了。为了判断1,我们只需要在第二重dp时,倒着扫,.原创 2022-07-08 09:38:17 · 187 阅读 · 0 评论 -
Codeforces Round #672 (Div. 2)Pokémon Army(c1+c2)
题目传送门题目大意:给出一个序列 a,要求求出一个单调递增的下标序列 b,使得 ans=ab1−ab2+ab3−ab4+…ans=a_{b_1}-a_{b_2}+a_{b_3}-a_{b_4}+\dots ans=ab1−ab2+ab3−ab4+… 最大,输出这个最大值。接下来有 q 个操作,每个操作为一个二元组 (l,r),交换 al与ara_l 与 a_ral与ar。求出交换后最大的 ans。其中c1 c2的区别在于c1操作数为0解题思路:通过对式子的观察,我们会发现找原创 2022-04-10 16:47:47 · 264 阅读 · 0 评论 -
挑战程序设计:Codeforces Round #776 (Div. 3) G. Counting Shortcuts(最短路计数+分层DP)
题目传送门题目大意:给定一张无自环无重边的无向图G,以及起点和终点S和T,边权都为1,求从S到T的路径长度<=最短路长度+1的数量。解题思路由于边权长度恒定为1,因此最短路计数十分简单,利用bfs即可,前时间复杂度为稳定的O(2m)。无需使用spfa或者djstra。当我们获得最短路的数量后,我们就需要考虑对于某一点如何求其最短路+1的路径数量。对于点x,设其距离S的最短路长度为midis,有哪些点会更新该点的最短路+1的数量。假设点x与点y联通:当点y的dis>midis时,原创 2022-03-09 17:05:21 · 488 阅读 · 0 评论 -
挑战程序设计:Codeforces Round #773 (Div. 2) D. Repetitions Decoding (构造)
D. Repetitions Decoding (构造)题目传送门题目大意:给定一个长度为n的数组,通过操作op将其扩展为新的组数操作op:选定一个位置id,插入两个相同的数c新的数组:能将其分为几段或不分,要求每一段中,前半部分与后半部分相同.输出要求:不可行输出-1可行输出op操作数以及操作以及对新数组的划分解题思路赛场上并没有当成构造题来想,以为是结论题,于是只能罚坐了最终的这个数组长度一定为偶数个。且每种数都为偶数个。那么我们可以排除元素组中存在某数有奇数个的情况。那么剩原创 2022-03-08 16:39:08 · 297 阅读 · 0 评论 -
Codeforces Round #768 (Div. 2) C And Matching(思维构造) D Range and Partition(贪心+动态分割)
C题传送门D题传送门D题赛后一分钟看出来bug,着实意难平,连夜写份题解泄愤,其实D题并不难,只需要注意两个思维点即可。先讲D吧D Range and Partition题目大意给定一个长度为n的数组a,将a划分成K块,每块都是连续的。求一个范围[x,y],且y-x最小。对于每一块都需要满足块中处于[x,y]中的数的数量严格大于不处于块中的数量。思维点思维点1:由于每一块中都需要满足条件,那么每一个中在范围内的数量一定>=不在范围内的数量+1.显然,于是我们可以得出一个对于整体原创 2022-01-28 01:37:57 · 802 阅读 · 0 评论 -
Educational Codeforces Round 120 (Rated for Div. 2) D. Shuffle(组合数学+巧妙去重)
题目传送门题目大意给定一个01字符串和k,你可以选择包含k个1的连续子序列,打乱顺序,问该01字符串最多能有多少种。解题思路显然,当我们选择了一个长度为M的子串,且子串中包含K个1,那么该子串的排列方式可以通过组合数学的方式得出CMKC^K_MCMK 。朴素的想法,我们可以枚举每一种尽可能长的包含k个1的子序列,但是这之中包含了很多重复的。如何去重便是解题关键。我们可以看相邻的两个极长子序列:其中红色的部分就是重复的,当我们用两段极长的排列数减去红色部分的排列数,我们就得到了一段新的不含原创 2021-12-28 12:47:10 · 964 阅读 · 0 评论 -
Codeforces Global Round 16 E. Buds Re-hanging
题目题目大意对于一棵树,定义了一个新的概念:芽。当一个结点的所有子节点都为叶子结点,该结点即为芽,但该结点不能为根结点。现在给定一棵树,可以对该树操作任意次数以下操作:将树的芽转移到其他结点。现要求构造叶子数最少的树,输出其叶子数。解题思路对单一的芽分析:当我们找到了一个芽,我们可以将其转移到另一个叶子处,使得树的叶子数减少。对整体分析:我们将树尽可能的拆成多个芽,如何重组能够使得叶子数最少?将芽放到叶子之后。当我们将一个结点数为x的芽放入到树中时我们可以减少一个叶子增加x-1个叶子,于原创 2021-09-17 18:59:30 · 108 阅读 · 0 评论 -
挑战程序设计4:Codeforces Round #738 (Div. 2) E. Mocha and Stars(dp+容斥原理)
题目题目传送门愉快的一天从补题开始!题目大意背包问题,给定n个区间,可以从每个区间中选定一个数,满足以下条件:n个数的总和<=m。n个数的gcd==1。求方案数n<=50,m<=105n<=50,m<=10^{5}n<=50,m<=105解题思路先来看一个条件:从n个区间中选定n个数,n个数组成的数小于m,求方案数。去掉区间就是一个背包问题:for(int i=1;i<=n;i++){ for(int j=w[i];j<=原创 2021-08-22 14:07:12 · 352 阅读 · 0 评论 -
挑战程序设计3:F1+F2 Nearest Beautiful Number(贪心,数位搜索)
题目题目传送门题目大意给定一个数N,要求一个数S,要求:S>=NS>=NS>=NS中出现的数字的种类<=kS_{中出现的数字的种类}<=kS中出现的数字的种类<=kk<10,10000组样例,N<=1e9k<10,10000组样例,N<=1e9k<10,10000组样例,N<=1e9未能过题,但值得思考的代码和思路首先我们可以通过确定哪几位为最终答案的所包含的数字,即先确定答案的组成。一共有C101+C102+…原创 2021-08-21 17:58:03 · 95 阅读 · 0 评论 -
Codeforces Round #739 (Div. 3) 1560E - Polycarp and String Transformation(逆向思维)
题目题目传送门题目大意给定一个字符串S,该字符串是由字符串T经过以下操作得来的:初始S=T选定T中的一个字母,删去T中全部该字母,得到新T’;S+=T’;重复以上步骤直到T被删完为止。现在给定结果串S,让你求初始串T和字母的删除顺序。解题思路初步分析似乎很复杂,如何确定删去字母,如何确定初始长度,似乎两者有着相互影响的关系。这是按照题目的意思去正向推理,问题变复杂了。那么便试试逆向推理。最后的一个T一定是由单一字母组成,倒数第二个由两个,以此类推。显然这样就求得了删除字符串的顺序。原创 2021-08-19 22:54:27 · 193 阅读 · 0 评论 -
挑战程序设计:1 D - Ezzat and Grid(离散化线段树线性)
题目传送门题目大意给定n个长度为1e9的01串,由于数据过大,所以采用区间的方式给定m, l ,r表示第m个串的[l,r]为1。定义一个美丽的序列,对于相邻的两个01串,存在同一位置两者都为1。问最少删去多少个串使得序列美丽,输出方案。解题思路先忽视数据范围,求最长的方案,可以采用dp的思想,dp[i]表示以i串为结尾的最长的长度,通过暴力的方法来解决问题:枚举当前串每一个为1的位置,该串可以继承在该位置为1的子串的最长长度(n∗n∗len)(n*n*len)(n∗n∗len)。时间原创 2021-08-19 11:29:58 · 147 阅读 · 0 评论 -
2021-08-13Codeforces Round #691 (Div. 2) C. Row GCD
题目题目传送门题目大意给定一个长度为n的序列a=[a1,a2,.....,an]a=[a_1,a_2,.....,a_n]a=[a1,a2,.....,an]和长度为m的序列b=[b1,b2,....,bm]b=[b_1,b_2,....,b_m]b=[b1,b2,....,bm]求gcd(a1+bi,a2+bi,....,an+bi)(i=1....m)gcd(a_1+b_i,a_2+b_i,....,a_n+b_i)(i=1....m)gcd(a1+bi,a2+bi,....原创 2021-08-13 18:05:19 · 78 阅读 · 0 评论 -
Codeforces Round #732 (Div. 2) D. AquaMoon and Chess
题目题目传送门题目大意给定一个1xn的棋盘,用01序列表示棋盘的初始情况,可以对旗子进行任意次操作:选择一颗棋子将其移动到i+2或i-2,前提是i+1或i-1处有棋子,即类似跳棋的规则。问棋盘能有多少种不同的状态。解题思路可以通过画图来分析问题,由原本的将相邻的两个棋子分为一组,不论如何移动,分组的情况是不变的,原本有k组两个相邻的,任意移动后,还是有k组,改变得只是他们得相对位置,并且我们无法控制单独出现的棋子的位置,即当0和2确定是1的状态是无法改变的,那么只能改变0,2的。那么答案就是c原创 2021-08-07 20:29:25 · 108 阅读 · 0 评论 -
Codeforces Round #694 (Div. 2) D. Strange Definition
题目题目传送门题目大意给定一个长度为n的序列,定义了一个概念相邻:假如两数的lcm,除以两数的gcd的结果为一个完全平方数,那么则称两数相邻。解题思路先看到给定的概念,lcm(x,y)/gcd(x,y)为一个完全平方数z2 ,lcm(x,y)=xy/gcd(x,y)。即:xy/(gcd(x,y)gcd(x,y)==z2 。那么这个概念便有了一种新的定义,当xy为完全平方数时,那么称这两数相邻。因为相邻,于是有了一个大胆的想法,相邻是否具有传递性?假如x,y相邻,x,z相邻,那么y,z相邻原创 2021-08-04 18:15:27 · 103 阅读 · 0 评论 -
Educational Codeforces Round 112 (Rated for Div. 2)+E. Boring Segments
题目题目传送门题目大意给定n个区间,表示l,l+1,…,r-1,r,相连,可以在这个区间内任意转移,现在要求一个区间子集,是得能从点1转移到点m,并且要求集合的中区间权值的最大值减去最小值最小。解题思路首先分析最大值减去最小值最小,可以联想到尺取法,将区间按照权值进行排序,利用贪心的思想,使得可行解的最大值减最小值最小,这是一个加区间删去区间的过程。那么来思考区间算法,很容易联想到线段树。线段树需要维护什么?看是否每一个点都被联通,[1,4],[3,5]是连同的,[1,4],[5,6]是不连通的原创 2021-08-01 17:27:18 · 110 阅读 · 0 评论 -
Educational Codeforces Round 112 (Rated for Div. 2) D. Say No to Palindromes
题目题目传送门题目大意给定一个长度为n的字符串,该串由‘a’,‘b’,'c’三种字符组成。给定一个区间l,r问最下修改多少次使得区间内不存在长度为2及以上的回文串。解题思路通过使用三种字符构造满足条件的字符串,我们能发现只有六种情况的字符串满足条件,‘abcabcacb’,‘acbacbacb’…。所以突破的关键在于3种字符。后记暑假来之不易,且学且珍惜。代码#include<bits/stdc++.h>using namespace std;int main(){原创 2021-08-01 14:08:43 · 253 阅读 · 0 评论 -
Codeforces Round #735 (Div. 2) C. Mikasa
题目传送门给定两个数n,m.求不能被n^(x(x<=m))表示的最小的数k。n,m的范围是1e9.共30000组。解题思路想找到一个k无法被n^x表示,根据亦或的性质,可以将其转化为找到一个k,使得k^n的值大于等于(m+1),且要求k最小。现在开始寻找最小的k。设i表示数在二进制下的第i位的状态。当mi=0时,假如ki^ni的值为1,那么必定大于m,后续也直接置零(贪心)。当mi=1时,那么ki=ni^1。根据该思路有以下代码:#include<bits/stdc++.原创 2021-07-31 22:33:05 · 101 阅读 · 0 评论 -
B Cobb
题目题目传送门题目大意给定一个序列,找到一组i,j(i<j)使得ij-k(a[i]|a[j])值最大,其中n小于1e5,k小于200。解题思路这是暑假写的第一道题,dev2的B.一上手就被a[i]|a[j]吸引住了,然后就傻了,想要从’|'中找到特性,其实当时也发现了k的取值给的十分突兀,为什么小于两百,时间复杂度一定和k有关,当时忽视了a[i]|a[j]<=2n这个隐藏条件。把这些联系起来就很简单了,k(a[i]|a[j])小于2kn那么对于(n-2k)(n)以下的都是无效,因为k(原创 2021-07-31 21:23:51 · 481 阅读 · 1 评论 -
Codeforces Global Round 15 Array Differentiation
震惊!01背包问题竟然可以被如此解决题目传送门:题目大意给定一个长度为n的序列A,问是否存在一个另一个序列B,使得序列A中的每一个数都能被序列B中的任意两数(可以选择同一个)的差值表示。解题思路首先可以在纸上画出这样一颗图可以将其结点看作B序列,边表示两点的差值,现在只需要再连接一条边,可以是自环,可以是反向边,就出现了n点,n边的的图。那么也就能找到这样的一个B序列,在考虑到树的图形可以是任意的,那么我们就可以想办法遍历树的任意形态,我们要在树上找到一个环,这个环的边权和为0;考虑正负,这道题原创 2021-07-27 12:33:44 · 139 阅读 · 0 评论 -
Harbour.Space Scholarship Contest 2021-2022 (open for everyone, rated, Div. 1 + Div. 2) D. Backspace
dev1+dev2 D题意要输入一串字符s,当输入到第i个时可以选择键入或者按下backspace键,按下backspace将会删去已经键入的字符,并且第i个也不会被键入.给定一个结果串,问是否能通过s得到改结果串.1.字串可以从任意位置开始,因为之前没有2.之后的字符,要么相邻,要么与下一个字符相差2的倍数的字符.code:#include<bits/stdc++.h>using namespace std;void sove(){ string a,b; cin>原创 2021-07-23 13:11:38 · 121 阅读 · 0 评论 -
1481D-AB Graph
1481D-AB Graph(思维+构造)题意给定一个完全的有向图,每条边上会有一个字符’a’ 或’b‘,给定一个长度k,求一条长度为k的路径,使得路径上的字符的构成的字符串为回文串。题目传送门解题思路仔细观察可以发现以下信息点:1.字符只有两种:那么意味着当长度为奇数时,在任意两点间往返跑,结果都是回文串。2.延用奇数的性质,将偶变奇:如何偶数变成奇数,可以找到相同的两边,x->y->z,在这基础上向两边展开,那么就变成了与奇数相同的情况。3.当图的点只有两个且字符不同且求长度原创 2021-07-12 17:48:30 · 107 阅读 · 0 评论 -
2021-07-10
Codeforces Round #677 (Div. 3) F. Zero Remainder Sum题意:给定一个n*m的矩阵数组,对于每一行最多可以选择m/2个数,求最大的能被k整除的数数据范围0-70.思考:可以很明显的看出这是个背包问题,每一行为一组物品,背包容量为m/2.对于最大能被k整除的数,可以增加模数维,利用模数进行状态转移。code:#include<iostream>#include<algorithm>#include<cstrin原创 2021-07-10 09:02:11 · 94 阅读 · 0 评论