- 博客(111)
- 收藏
- 关注
原创 Codeforces Round 893 (Div. 2) D.Trees and Segments
当然这样子操作的总复杂度是O(n^4),我们肯定是不能接受的,那么怎么能让它复杂度降下来呢?我们可以利用dp来预处理,用dp[i][j]来表示[i~n]区间,操作数最大为j时,1串的最大长度。可以发现n
2023-08-17 21:23:10 324
原创 2023牛客暑期多校训练营8(A/H/I/J)
根据题意我们可以发现,因为数字是按顺序1,2,3......插,所以若一段区间[l,r]满足条件,那么[l,r'](r'
2023-08-15 17:08:37 590
原创 2023牛客暑期多校训练营7(C/I/M)
找f[i]的f[i-1]的从高位到低位,第一个不同的位即可,我们设这个是第k位。此时a[1]的第k位必须和f[i]第k位的值相同,这样子就能让f[i]^a[1]的第k位是0,f[i+1]^a[1]第k位是1,保证了前者小于后者。首先我们先初始化a[1]二进制位为-1,这代表a[1]的这个位可以是0,也可以是1。然后我们再根据a[1]^f[i-1] <= a[1]^f[i]此时我们得到了n个-1的值,我们我们最多能表示第2的n次方大的值,此时我们只需将(k-1)拆分成二进制依次填入-1的位置即可。
2023-08-10 17:00:39 669
原创 2023牛客暑期多校训练营2(D/E/F/H/I/K)
该情况可推广至三个棋子,三个棋子的距离端点距离可以抽象为所有棋子距离端点的距离之和,棋子可以在端点之和为奇数的区间内反复横跳,来保持自己的最终的奇偶性,从而导致先手必胜,反之先手必败。操作A相当于将x变成反码,也就是在取模意义下,操作A会令x=-x-1,而操作B会x=x+1,所以我们先开两个前缀和数组,一个记录前缀A的个数,一个记录前缀的贡献,然后在每次操作中,若l~r的区间内的A的个数为奇数,则原本的贡献要乘上-1,如此模拟即可。所以我们考虑倒着贪心。dp[i][0]表示第i位移动到i-1位的情况。
2023-07-26 17:21:17 621
原创 Codeforces Round 888 (Div. 3) A~F
比如第一个数是0,第二个数是0,用1来异或这两数后,第一个数变1,第二个数变1,他们两相与为1;比如第一个数是1,第二个数是1,用0来异或这两数后,第一个数还是1,第二个数还是1,他们两相与还是1;比如第一个数是0,第二个数是1,用1来异或这两数后,第一个数变0,第二个数变1,他们两相与为0;用0来异或这两数后,第一个数还是0,第二个数还是1,他们两相与还是为0。①1~n之间恰好有两个数的位置上是空的,并且恰好有一个数多余的数,等于这两个位置加起来,这样就能使得1~n填满。
2023-07-26 12:55:13 340
原创 2023牛客暑期多校训练营1(D/H/J/K/M)
每次分治Walk Alone赢的基础概率为1/2,而后面的第x个的0会产生(1/2)^(x+1)的贡献,这表示形成之前x-1情况的概率*1/2,所以每位1的总贡献为1/2+(1/2)^2...(1/2)^(零的个数+1),最后分块求和就完事了。因为连续的x-1位0对于的答案的贡献为-(2^x-1),而连续的x-1位0后的第x位1的贡献为2^x次,它们的和即为-(2^x-1)+2^x=1。我们将a[i]>=b[i]的序对称为序1,a[i]
2023-07-18 18:08:43 773 1
原创 The 2022 ICPC Asia Xian Regional Contest(C/E/F/G/J/L)
若一个单词S满足条件,则它的子串S[1~n-1]和S[2~n]也满足条件,所以我们根据字符串长度从下往上拼出最长的单词,若这个单词S能在比它长度小的set集合中,找到S[1~n-1]和S[2~n]两个字串,说明这个字符合法,放入set,反之continue。总结一下,就是枚举r在三进制上的每一位,然后该位-1,后面的位都变成2,再判断它是否大于l,若合法则答案取min。当我们选择i=n时,我们则可以选择整个区间,所以我们在这个区间内我们可以分别选择最大的2个元素、最大的1个元素、不选,三者取max即可。
2023-07-11 17:14:39 703
原创 Codeforces Round 883 (Div. 3) A~G
当q小于1e6时,直接预处理判断即可,而当q大于1e6时时候,若k等于4,则(1-q^4)/(1-q)>1e18,超过了n范围了,所以当q>1e6时k只可能等于3,此时只需要判断q^2+q+1=n,是否存在整数根即可。给你n个m行的出题时间,比赛在第h分钟罚时结束,每做一个题的罚时会累加到后面,你是第一个人,问你的排名是多少(若有人和你并列,你的排名则在那个人的前面)。给你一个n,问你是否能够找到(1-q^k)/(1-q)(等比数列前n项和)恰好等于n,其中q,k为自定义,q>=2,k>=3。
2023-07-08 12:53:44 747 1
原创 The 2021 ICPC Asia Shenyang Regional Contest (B/E/F/J)
我们可以先根据起点和终点的位置先得到他们的相对位置,比如起点为“1234”,终点为“2345”,那么他们的相对起点为“0000”,相对终点是“1111”,也就是他们两相减。因为对于二进制来说,每个位数的异或是独立的,是互不影响的,并且若已知一个连通块中某个点权的某个二进制位值,那么其它点权的该二进制位值就都知道了,所以只需枚举各个连通块中随便的一个点权的二进制位即可,并且二进制是0的情况和二进制是1的情况是对称的,取min累加即可,具体实现见代码与注释。给你一个字符串,问该字符串中有多少个“edgnb”。
2023-07-05 14:30:21 367
原创 Educational Codeforces Round 151 (Rated for Div. 2) A~D
首先,对于每一位上数字的数字k,我们从它的范围[li,ri]遍历一遍,在遍历的过程中,若k在字符串中存在,则最优的选法是数字k在未被“删”去的字符串中第一次出现的相同数字的靠后位置。分类讨论,若B点的横坐标和C点的横坐标相对于A点的纵坐标在同一侧,则对于答案的贡献为B点和C点与A的横坐标距离的较小值,也就是“公共横坐标路径”,公共纵坐标路径的贡献的计算同理。给你三个整数n,k,x,你可以使用1~k中除x以外的任意数字,并且能使用无数次,问你能不能从中选出拼出n的数字。若我们选择了数字2,则子序列从111。
2023-07-01 17:12:12 871 2
原创 2020 China Collegiate Programming Contest Qinhuangdao Site(A/E/F/G/K)
2020CCPC秦皇岛
2023-04-16 15:51:23 538
原创 Codeforces Round 859 (Div. 4) A~G
思路:我们考虑最“坏”的情况,数组为1,1,2,4,8,16......,可以发现它们都是2的幂次,通过二进制的思想可以发现他组成数的范围为1~sum,所以1~sum都能利用前面的数组成,利用前缀和判断下一个数是否大于sum即可。思路:利用前缀和二分判断区间内的总和是否合法,若左区间合法则r=mid,反之l=mid+1,直至l=r。思路:按照题意模拟即可,主要就是判断有没有重复一开始的两步行为,若有则输出-1。思路:把偶数全放前面,把奇数全放后面,这样只用看偶数之和是否严格大于奇数之和。
2023-03-20 14:13:59 458 1
原创 Educational Codeforces Round 144 (Rated for Div. 2) C. Maximum Set
问在区间[L,R] 中由这个区间某些数内构成的好的集合的最长长度是多少,以及且满足这个长度的好集合有多少个。当然,一开始我们需要特判下l*2>r的情况,此时集合最大长度为1,并且因为集合中的第一个数也就是最后一个数可以取l~r的所有值,所以方案数为r-l+1。PS:最开始左端点为l,并且p*左端点=l并且
2023-03-01 21:14:08 529 3
原创 Codeforces Round #847 (Div. 3) A~E
排列的第一个数在每个数组的第一个位置总共会出现n-1次,由此我们可以确定排列的第一个数为k,然后我们找到那个数组第一个数不是k的数组,这个数组就是排列第2~n的数字,输出第一个数并且输出该数组即可。若一个数前面没连续数字,则该数对于答案的贡献为该数出现的次数,但若该数前一个数出现过了,那么该数的一部分就能合并到前一个数里面,减少了上一个数出现次数的贡献(该数贡献最多减少至0)。已知道所有骰子的数量,骰子的点数总和,以及拿走一个最大值的点数总和,请构造所有骰子的点数。求出一个数字的前几位和 π 相同。
2023-01-28 16:57:25 913 2
原创 Educational Codeforces Round 141 (Rated for Div. 2) C. Yet Another Tournament
在一开始,第i个人会赢i场,但是你可以选择任意k个不同的a[i],并且满足这k个a[i]的和小于m,然后你就可以让这k个a[i]对应位置的胜场减一,并且你的胜场为变为k,也就是你选择a[i]的数目。然后你就可以选择i=1,i=3,i=4,因为a[1]+a[3]+a[4]=1+2+1
2023-01-09 03:00:11 490
原创 【每日一题】打卡 76
我们可以发现,若一个结点的子树最左边的编号为l,最右边的编号为r,那么它下一层子树的编号的范围为l*k+1~r*k+k,所以我们利用dfs一层一层累加,判断左右边界即可,具体实现见代码。
2023-01-05 19:03:31 281
原创 Good Bye 2022: 2023 is NEAR D. Koxia and Game
最后在有解的情况下,若结点a[i]=b[i],则方案数*n,因为c[i]无论怎么选都不会使得本来有解的情况变成无解,所c[i]可以在1~n中任选。=b[i],则看a[i]和b[i]是否在一个环中,若在一个环中,就说明我们可以在这个环中逆时针选一次,顺时针选一次,方案数*2。而若a[i]和b[i]原本就一样的话,c[i]可以选任何值,对方案的贡献值为*n,若不一样的话,则c[i]只能等于a[i]或者b[i]。首先我们需要知道,a[i]、b[i]和c[i]中一定要有两个是相同的,并且。可以画成下面这样的图。
2023-01-02 21:53:23 591 5
原创 Good Bye 2022: 2023 is NEAR C. Koxia and Number Theory
的格子,怎么放都会有一个格子里的物品数小于2(鸽巢原理),所以只需要枚举。给定一个长度为n的数组,请问是否存在一个数 x ,使得任意两个数。即可,最后的最后别忘了判断数组内有数字重复的情况。若是输出 YES ,反之输出 NO。就不为1了,就不符合题意了。好了,现在我们提炼一下上面的规律。中至少要有一个能选,也就是。就没值可以选了(此时若。都不能选),因此若要。
2023-01-01 15:48:02 661 5
原创 【每日一题】打卡 74
若只执行一次区间内两两交换,则区间内有两个元素属于原本的区间,其它元素都在区间外;同理,若只执行两次区间内两两交换,则区间内有四个元素属于原本的区间。由此可以发现,若这个区间的元素位置全部被改变了,那么属于原本的区间的元素个数必然为偶数,反之为奇数。利用二分答案查找区间即可。操作过后会得到一个最终序列。根据题目要求我们可以发现:若我们选择一个区间[l,r],并且这个区间所有元素的位置都被改变了,那么原来区间内的元素会有一部分在区间内两两交换(也可能没交换),其它部分必然会和区间以外的元素交换。
2022-12-30 15:28:40 100
原创 【每日一题】打卡 73
二分答案边长的值,check函数的判断则是先将矩阵根据mid值的大小化为01矩阵,若a[i][j]的值比mid大则01矩阵的值为0,反之为1。然后用sum数组来表示01矩阵的前缀和,利用前缀和数组来枚举边长为mid的正方形矩阵,若矩阵的前缀和等于mid*mid则说明该矩阵满足条件,返回true。给一个二维数组a,问最大可以找到多大的正方形,使得正方形内所有数字都大于等于正方形的边长。
2022-12-28 15:39:31 141
原创 【每日一题】打卡 72
根据题意我们可以发现a可以变到b的后面,而c能变到b的前面,所以我们先判断去掉b的字符串是否一样,若一样,则判断字符串s的a,是否在字符串t对应的a的前面,字符串s的b,是否在字符串t对应的b的后面。1.把 ab 换成 ba。2.把 bc 换成 cb。问是否能变成字符串 t。
2022-12-27 18:12:52 104
原创 【每日一题】打卡 71
贡献10是这个1作为某长度为2的子串开头的时候,贡献1是这个1作为某长度为2的子串结尾的时候。而开头的1贡献为10,比11少了1,结尾的1的贡献为1,比11少了10。现在给你m个操作数,每次操作可以交换任意两个相邻的字符串,问你经过小于等于的m任意次交换,S的最小的结果会是多少?给你一个二进制的01字符串,让我们定义这个二进制字符串的结果为si&si+1的所有十进制数之和。他的所有结果为"10"+"01"+"11"=22.,可以减少大小为10的贡献;可以减少大小为1的贡献。例如:S=1011;
2022-12-27 16:22:08 192 1
原创 【每日一题】打卡 67
利用子串进行dp,转移方程为min(dp[i+k],dp[i]+1),k为子串长度,dp[i]表示覆盖完前i个字符的最小步数,用lst数组记录答案即可。给你一个模板串s,再给你n个子串t,求最小能把s覆盖完的需要的t的数量,不能输出-1。
2022-12-22 18:39:50 133
原创 Educational Codeforces Round 136 (Rated for Div. 2) C. Card Game
而将用n-1逼出了n,相当于牌堆里少了两张牌,也就是回到了总牌数为n-2的情况,唯一不同的是,这次是Bob先手,而总牌数为n-2时是Alice先手,所以这时总牌数为n时Alice获胜的情况数就是总牌数为n-2时的Bob获胜的情况数,所以当Alice只拿到了n-1的情况数即为b[n-2]。由此可以得出平局的局面只有一种,而Alice赢的局面有C[n-1][(n/2)-1]+b[n-2]种,剩下的局面即为Bob赢的局面了,即为。因此,Alice获胜的总情况数为C[n-1][(n/2)-1]+b[n-2]。
2022-12-20 18:08:24 462
原创 Codeforces Round #840 (Div. 2) and Enigma 2022 - Cybros LNMIIT_C. Another Array Problem
又例如{3,4,1,2},我们可以经过上述前面的步骤,将数组变为{3,4,0,0},选择第二个位置上的4和最后一个置上的0,数组变为{3,4,4,4},再将第一个位置上的3和第二个位置上的4选择两遍,数组就变成了{0,0,4,4},最后我们选择第一个位置上的0和最后一个置上的4,就可以把数组的所有元素变成4了。给你一个数组a,你可以选择任意两个下标i和j(i
2022-12-20 09:21:45 454 1
原创 Polynomial Round 2022 (Div. 1 + Div. 2, Rated, Prizes!) C. Ice and Fire
给你n个人,第i个人的力量值为i,一共会进行n-1次比赛,第i次比赛会从[1,i+1](i
2022-12-19 21:06:26 460
原创 Educational Codeforces Round 139 (Rated for Div. 2) D. Lucky Chains
又因为y-x是定值,所以我们只需要对y-x进行质因子分解,对于y-x的每个质因子,求出第一个大于x且是该质因子倍数的数,我们设这个数为p,则k=p-x,每次k取min即可。求k的最大值使得gcd(x+[1,k],y+[1,k])=1。
2022-12-13 23:31:44 110
原创 Educational Codeforces Round 139 (Rated for Div. 2) C. Hamiltonian Wall
若没找到这一列,则说明矩阵内全是B,输出YES。找到这一列后,若B在该列第一行,则用st=0表示起始位在第1行,否则用st=1表示起始位在第2行。接下来我们往后走,如果该列有两个B,说明我们需要改变状态,在下面的要走到上面,在上面的要走到下面,用st=!st来表示状态的变化,变化完后我们判断它的右边能不能走,也就是判断i+1是否等于W,如右边不能走说明不合法输出NO,否则就一直走,走到倒数第二列就结束。给定 2∗n 的由 W 和 B 组成的字符,请问能否不重复的一次走完所有 B 的格子。
2022-12-13 17:10:22 369
原创 Codeforces Round #837 (Div. 2) Hossam and Friends
Codeforces Round #837 (Div. 2) Hossam and Friends
2022-12-12 03:21:46 1173 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人