随笔分类 - cf
摘要:B 首先注意到一个连通块最多操作两次,如果大小为1,那么只需要操作一次,那么对于每个颜色,操作次数就是所有连通块中是否有大小 的,如果有那么就是2,否则是1,枚举最后使用哪个颜色即可 C 注意到值域只有{1,2,3},并且长度至少为3,那么一定是形如1,2,2,....2,3这样的形式
阅读全文
摘要:https://codeforces.com/contest/1898 C题可以造一个大小为4的环,然后再造一个来回,这样就解决了%4=0,%4=2的情况,而奇数的情况显然无解。 #include<cstdio> #include<algorithm> #include<cstring> #incl
阅读全文
摘要:B题 假设我们考虑能不能获得1,注意到b-c的奇偶性不会改变,然后特判一下只有一个大于0就行。 #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<map> #include<vector>
阅读全文
摘要:https://codeforces.com/contest/1455 很久没有vp了,感觉思维又僵化了 A题直接看样例,直接猜是长度。 B题首先如果是 ,那么就是n 否则如果 ,分成两类 y=n,ans=n+
阅读全文
摘要:https://codeforces.com/contest/1864/problem/D 结论很好猜,直接从上到下做就行 我们可以维护差分数组,表示对下面的影响,逐行往下推就行,当然+和-要分开,因为一个是往前推,一个往后推。 时间复杂度 #include<cstdio> #i
阅读全文
摘要:https://codeforces.com/contest/1864/problem/C 思维越来越僵化了 假如 ,直接每次/2就行。 否则,我们可以考虑如何转化成上面的情况 令 ,那么我们显然可以转移到 ,因为x是奇数,所以2的次幂
阅读全文
摘要:https://codeforces.com/contest/1853 C题感觉很不好写的样子,首先通过打表发现最后答案每次都是+n,那么我们考虑前i个,假如当前的ans+i仍然小于a[i+1],则没有影响,我们依然可以直接往后跳,否则,我们越过了a[i+1],那么我们应当加上i+1,注意,这有可能
阅读全文
摘要:https://codeforces.com/contest/1661/ B题数据很小,直接bfs预处理就行 C题随便猜了一下,设mx= 最后的值应该是 mx,mx+1这两个值,二分一下,就行 D题刚开始从前面考虑,陷入僵局,一度非常的困,学习凯库勒睡了一会,就突然想到了,
阅读全文
摘要:https://codeforces.com/contest/1894 A题题意说一堆,还看了好几次,读懂之后就很简单,直接输出最后的。 B题直接数一下有多少个大于2的块即可。 C题每次找到最后一个,判断一下即可,同时打上标记,保证时间复杂度。 D题手玩之后发现我们可以用以下方式插入b 将大于等于a
阅读全文
摘要:https://codeforces.com/contest/1842 C题很像leetcode上买股票那几题的套路,直接dp就行 ,g[j]表示以i结尾的最大值,很显然可以将跟j有关的项分离出来,然后对于每种ai维护最大值
阅读全文
摘要:cf797e 还是暴力,将不同的询问根据k分开,然后bfs,建出一棵树,然后dfs。 时间复杂度:O(能过) 稍微口胡分析一下 大概是 qi表示第k=i的询问个数 因为每一种k它最多
阅读全文
摘要:cf1582F2 对于每种数可以维护一个列表v[x],表示到当前位置,最后一个数小于等于x,能够取到的值,对于当前的数ai,我们可以用v[ai]中的值x与ai异或,来更新v[ai+1],v[ai+2]后面的值。 然后就是有两个优化,每次我们更新完后,都对v[a[i]]清空,因为只有两个相同数之间的数
阅读全文
摘要:cf1709E. XOR Tree 贪心是显然的,关键是如何合并两棵子树的信息,可以采用启发式合并。 #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<map> #include<vecto
阅读全文
摘要:cf1834E 首先可以估计一下答案的量级,因为小于答案的质数都要必须要出现,5e6以内的质数大概就是3e5,所以答案不超过5e6。 我们维护以i右端点的lcm的值,这些值的数量不会太多,因为每次增长都至少×2,所以是log级别。 每次新加的时候记得更新和去重即可。 #include<cstdio>
阅读全文
摘要:添加链接描述 B题直接前缀后缀预处理一下没了 C 首先题目保证有解,那么我们可以确定"("和")"的数量,显然前面全部填(后面的全部填)肯定是合法的,然后交换两个最近的,影响最小,判断一下即可。 D题首先根据%k余数判断是否有解, 然后肯定是直接往下走到最大,然后走过去,rmq预处理即可。
阅读全文
摘要:添加链接描述 C题显然二分0的数量,然后双指针,算一下前缀和后缀1的数量即可。 #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<map> #include<vector> #include
阅读全文
摘要:Educational Codeforces Round 129 (Rated for Div. 2) B可以看作一个无限长的序列由a进行重复拼接,我们直接计算一下是哪个即可。 C判断无解之后直接模拟即可 D IDA*就行每次从大到小搜,实际非常快。 #include<cstdio> #includ
阅读全文
摘要: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被切穿了。 A题 答案为 x 或者 x-1 1 B题 答案就是最长的连续一段的长度+1 证明的话大概可以将它看成是几段连续上升和下降的段,然后在峰谷、峰顶分别填上最小、最大,剩下的就依次递增或递减就行。 C题 将一段连续的0/1视作一个块,那么我们最小化这个块的数量就行。 D题如果猜到如果有解
阅读全文