10 2023 档案
摘要:Codeforces Round 907 (Div. 2) B题注意到每次都会至少下降1,所以不会超过30次,直接O(30n)即可 C题感觉可能比D和F还要思维一些。 肯定是尽量多积累combo一些然后一次清空,那么我们能清空的最大值就是当前的最大值,所以每次用小的来累计combo,然后消除当前的最
阅读全文
摘要:D. Queue f[i]表示第i个F需要多少时间才能让所有的M都移到她后面,那么我们考虑转移,分为两种情况。 第i个F和第i-1个F挨着,那么显然f[i]=f[i-1]+1 假如中间隔着一些M, 可以分为两种情况,假如i可以在i-1完成之前追上它,那么就是f[i-1]+1,否则就说明 i一直在进行
阅读全文
摘要:D. Pawn 感觉这种dp套路似乎非常常见,我们可以设 f[i][j][x]表示走到(i,j),当前的值为f[i][j][x]*k+x ,也就是我们将余数x作为放在状态中。 #include<cstdio> #include<algorithm> #include<cstring> #includ
阅读全文
摘要: 对于一个i,枚举k 对于[xk, x(k+1) ),中的数,贡献的形式都为a[i]-i*k 直接差分维护即可 #include<cstdio> #include<algorithm> #include<c
阅读全文
摘要:答案大于max{ai}可以直接计算 主要考虑小于的情况 直接计算gcd很困难,不妨枚举x|gcd 那么对于ai来说 假设 x(k-1)<ai<=xk,那么 ai就需要xk-ai次操作,那么我们对于一个x,只需枚举k计算区间数的个数即可算出需要的操作数。 复杂度O(nlnn) 这种套路就是取模转化成减
阅读全文
摘要:这场D被切穿了。 A题 答案为 x 或者 x-1 1 B题 答案就是最长的连续一段的长度+1 证明的话大概可以将它看成是几段连续上升和下降的段,然后在峰谷、峰顶分别填上最小、最大,剩下的就依次递增或递减就行。 C题 将一段连续的0/1视作一个块,那么我们最小化这个块的数量就行。 D题如果猜到如果有解
阅读全文
摘要:A题直接拆成 1 1 n-2 <=4时bob,否则alice B题直接模拟一下就行 C题开始想复杂了,我们直接枚举是哪个字符转成哪个字符即可,如果是变大,一定是放在最左,如果是变小,一定是放在最右,爆算即可。 D题,显然N^2dp,但是还是想错一些细节,假设按右端点排序后,当前考虑第i个区间,假设我
阅读全文
摘要:F - Transportation 一天遇到两道生成树的题目,还都不会做,菜哭的一天。 这题的做法是另外建两个点n+1,n+2,然后做生成树,因为我们只要前n个点联通就行,后面两个点不一定,那么枚举一下就行。 #include<cstdio> #include<algorithm> #includ
阅读全文
摘要:E - Choose Two and Eat One 非常巧妙的一集 可以将整个局面看作一张图,选两个数获得的score就是它们的边权,然后做最大生成树,不难发现操作和建树之间是一一对应的。 #include<cstdio> #include<algorithm> #include<cstring>
阅读全文
摘要:C题就是考虑利用1,n两个端点就好,有些细节要特判。 #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<queue> #define A puts("Yes") #define B puts
阅读全文
摘要:C题结论就是每行每列不同的个数必须是偶数。 D题首先注意到对于长度相同的询问,答案都是一样的。 同时相同的s可以直接丢掉。 那么我们将s排序之后,将相邻的差再进行排序,然后将询问从小到大处理。 相当于是将这些段拼接在一起。 #include<cstdio> #include<algorithm> #
阅读全文
摘要:cf1110D. Jongmah 如果能够发现一点转化的话就简单很多 比如说最后的答案里出现了 三个(a,a+1,a+2),我们可以将它看作是(a,a,a),(a+1,a+1,a+1),(a+2,a+2,a+2) 也就是每种三元组(除了(a,a,a))最多只会出现两次 那么每种数最多有6个是个其它数
阅读全文