省选前的日子

最后的最后,还是没有奇迹发生。


可能不会记录很久了,毕竟自己 noip 可能就退役了。

只会记录从 11 月开始的,其他的看情况补吧。


好耶 noip 虽然考得烂但是没退役。

退役时间被续到了省选,还有大概 4 个多月的时间。


(目录其实只是 CF 口胡题解的目录。)


2022.4.18

没想到啊没想到,省选会以这样的方式收场。

说着没想到,其实早就想到了吧?

唉,现在没办法,只能是祝syh和lc进队,而我whk要加油了。

不过每个人心里都有个阴郁的想法。也许他们能和我一起来学whk呢?那样我的心里会好受一点,但是老师就不好受了。唉。


2022.4.15 Day0

反正是没啥时间复习了,放平心态,好好休息,争取最好的发挥就好了吧。

不过在学校考省选属实是头一遭,离谱。不知道别的地方会不会有大规模作弊出现呢?

今天试了一下机,感觉还行。没想到 OI 生涯中第一次试机居然是在自己学校的线上省选,哈哈。

其实的话,完全没有复习完呢。不管了,相信天命吧。


2022.4.13

今天中午出现了类似之前中考前的睡不着的状况。感觉自己还是挺紧张的吧就。

好好复习吧,别想这么多。


2022.4.12

还有几天!!!111

把剩下的题做的七七八八了。接下来就是整理一下模板复习复习。

调整好心态,加油吧。


2022.4.6

你妈的,以为硬盘炸了,结果没炸。

然后自己误操作删掉了自己的资料。哈哈哈。这下谁都怪不了了。

困死了,回家休息好像效果不太大。睡觉咯!

Codeforces Round #778 (Div. 1 + Div. 2, based on Technocup 2022 Final Round)

B

前面怎么操作不重要,重要的是什么时候停下来。那么什么时候停下来呢?就是只有一个字符也没得删的时候。然后你就做完了。

C

可以直接模拟操作,用一个堆维护切东西的操作,从大到小切,切一个东西的时候看切出来的东西剩下的数量,假如没剩了就加入切的队列,n-1 次操作后看一下切的队列是否清空即可。

D

主要是读题,注意到只有 n-1 个关系,又因为比值是确定的,所以关系构成的图一定连通,于是就是棵树。以随便一个点为 1,维护一下每个位置的每种质因数的次数的最小值就好了。

E

根号分治,小的可以直接枚举穿过每个数的线的截距,大的因为下标跨度最多 sqrt 所以可以暴力枚举上一个进行 dp 转移。利用哈希表即可做到 \(O(n \sqrt m)\)(然而我懒用了个 map 多带了个 log 还卡过去了。)

F

考虑类似 SA 的做法,每次扩展一下就好了。感觉自己已经忘光 SA 了哈哈。

G

考虑一个点能获得的能量是固定的,所以肯定是到达最低的平台然后在平台上蹭来蹭去(这样能充分利用能量)。于是我们需要找到每个点能到达的最低平台。你分析一下,给每个平台一条往下的链,因为这是棵树,所以一个平台高度为 k 就至少有 k 个点能和它匹配,于是最多有根号种不同高度的平台,每种平台做 dp 记录至少还要再爬多高,判断能否到达就好了。


2022.4.3

哈哈,今天打了 pjudge 的模拟赛,被锤烂了,T1 想了巨久。菜死了。(可能是没睡好!)(找理由!)

T2 自己没想出来(懒)。乃至被初三的同学吊打。我这样咋省选啊。

Codeforces Round #767 (Div. 1)

A

考虑 mex 单调不减,所以每次找到恰好变成最大 mex 的点就好了。这个可以双指针扫一下,维护一下前后缀的 mex。

B

肯定不能出现单个的回文串,先判掉。之后考虑任意一种方案,只抽出来左右两边的串拼在一起肯定也是回文的,所以只用判一下有没有任意两个能组成就好了,用哈希加上 map 即可。

C

神必构造,不过自己想出来了。本质上是做覆盖,要求每个格子被覆盖奇数次,然后你考虑两个连着的选择构成的小覆盖图形,从小往大扩展即可。

D

\(dp_{i,j}\) 是剩下 \(i\) 个操作,至少 \(j\) 次加的答案,考虑每次选择的数 \(x\),则后手会取 \(\min(dp_{i-1,j-1}+x,dp_{i-1,j}-x)\),于是先手就是要最大化这个东西,你发现 \(x=\frac{dp_{i-1,j}-dp_{i-1,j-1}}{2}\) 的时候最优,于是就有 \(dp_{i,j}=\frac{dp_{i-1,j-1}+dp_{i-1,j}}{2}\)。然后 \(O(n)\) 加速的话就瞎 jb 组合数一下就好。

E

两个 log 很容易暴力维护。考虑一下怎么一个 log。搞出 kruskal 重构树(小到大),然后每次查询相当于查 x 和集合中的点的并集的 LCA 的权值,然后因为都是叶子所以只用取 dfn 最小和最大的,你就做完了。


2022.4.1

Codeforces Round #779 (Div. 2)

C

麻了,这个 C 我还要猜结论,我太菜了。你不难猜一猜就是每次 \(a_i<=a_{lst}+1\),然后莫名其妙就过了。其实很好构造,从 \(a_i\) 小到大,值从大到小来填,假如有相同的 \(a_i\) 则先填 \(i\) 大的。

D

没看 D1 直接看的 D2。容易发现异或一个 2 的幂次就是把 01 trie 树上的某一层的左右儿子交换,于是整棵树依然是同构的,两边(新的 01 trie 和原来的 01 trie)一起 dfs 判断一下要不要异或就好了。

E

考虑每个点是先手必胜当且仅当走不到之前先手必胜的点(初始化每个点先手必败),于是从大到小考虑每个值,相当于是对 \(y-x\) 有个限制,对 \(x+y\) 有个限制,随便搞搞就好了。

F

好妙。自己还要看题解,太菜了。你考虑每一段长度为 m 的循环子串,设 i 开头的循环子串上面的 1 的个数是 \(c_i\),则有 \(|c_i-c_{i+1}| \le 1\),所以对于 \(\min c_i\)\(\max c_i\) 都有方案。然后你发现因为原串的比例大概相当于“平均数”,所以肯定有对应的方案,只需要判断是 1 段还是 2 段就好了。


2022.3.31

昨天博客园登录时要我手机验证,我手机没电了(

总之昨天 noi ol 出分了,确实 300。

关于今天的模拟赛:垫底了!

所以来做做 CF(其实是昨天 vp 的,今天只是补题)。另外还有在做 OI 思维导图,准备清明回家的时候过一遍知识点。

CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes!)(巨大构造场)

C

考虑到 x mod x = 0,所以在没有 1 的情况下让大家都是 0 就好了。否则若有 1,只需要看看有没有差距为 1 的两数即可,容易证明正确性。

D

考虑 k-good 数最小是多少,显然是 k(k+1)/2。然后你发现一个数 n 是 k-good 的,在 k 为奇的时候即为 k 是 n 的因数,在 k 为偶的时候即为 2k 是 n 的因数,所以你把 n 不断除以 2 得到剩下的 k,看看 k 和 2n/k 谁更小即可,注意特判 2 的整数次幂。

E

观察每个连通块的性质,他们在原树上都有一条边连向那个被删去的点。利用这个,我们希望只有这一条边有贡献。于是我们让每个边在端点分别有 -1 和 1 的贡献值,按照深度奇偶性分配一下就好了,于是一个点权值为 dep[x]&1?deg[x]:-deg[x]。

F

判断 INF 是容易的,只需要判断 \(t=INF\)\(t=-INF\) 的情形就行了。之后看到形式考虑配方,\(W'_{i,j}=(a_i+t)(a_j+t)=W_{i,j}+t^2\),所以 \(K'_n(t)=K_n(t)+(n-1)t^2\),然后你发现转换后的代价和 \(a\) 完全无关,也就是说转换前后 mst 的形态是一样的。假设 \(a\) 从小到大排序,那么当 \(a_i\le t\le a_{i+1}\) 时的形态不难找出,然后因为 \(a_i\le t\le a_{i+1}\)\(K_n(t)\) 是关于 \(t\) 的一次函数,所以只需要取边界就好了。然后就能 \(O(n)\) 求最大值了。

G

如何判断无解?显然首先得能凑出回文串,其次如果 n 是奇数,那么放在中间的那个数不能只有一个。如何证明?直接考虑构造方案。先考虑偶数的情况,我们随便凑出一个置换 p 使得它满足回文,这个时候有一堆置换环。第一步,我们把 i 和 n-i+1放到同一个环里,具体就 swap(p[i],p[n-i+1]);搞完之后我们要把剩下的 m 个环都 merge 到一起,需要构造一个新的置换 p'。我们就在每个环里选一个点,然后对于 \(1\le i\le m-1\),我们执行 p'[i_j]=p[n- i_j+1 +1],p'[n- i_j +1]=p[i_j+1],最后执行 p'[i_m]=p[i_1],p'[n- i_m +1]=p[n- i_1 +1],然后你就会发现所有点都在一个置换环里而且依然满足回文。如何搞奇数呢?你发现只要不让中间那个数形成自环就行,那你一开始构造方案和最后合并环的时候都注意特判一下就行。

H

首先考虑如何判断两个集合 A 和 B 的 lcm 是否相等。你直接求 lcm 显然不太现实。我们考虑分别判断 A 的 lcm 是 B 的 lcm 的因数以及反过来,B 的 lcm 是 A 的 lcm 的因数。那你令 \(f(a,A)= \gcd(a/ \gcd(a,A_1),a/ \gcd(a,A_2),...,a/ \gcd(a,A_n))\),那么假如 \(f(a_i,B)\ne 1\),就意味着 \(a_i\) 中有个 \(p^k\)\(B\) 中所有元素都没有的,那么 A 的 lcm 就不是 B 的 lcm 的因数。这样 check 是 \(n^2\log V\)的。

然后考虑我们对每个元素都建立一棵线段树,每个节点代表 \(f(a_i,B_{l,\cdots,r})\) 或者 \(f(b_i,A_{l,\cdots,r})\),然后如果有一棵线段树的根节点的值不是 1,你就把这个元素在对面的所有线段树上删去。为什么呢,因为这个时候对面的集合如果删去东西,你这个根节点的值反而还有可能变大,所以你这个元素是一定要删的。删的时候重新计算一遍线段树的值,势能分析一下发现删一棵复杂度是 \(O(\log n+\log V)\) 的,你就能通过此题。


2022.3.29

挺久没做 cf 的,今天随手做一套 div.2。

在划水+网不好的情况下 2h 内切了前 5 题,感觉还行。就是这个 F 属实没啥营养。

唉,下午还得补上昨天的 B。说不定还能卷掉 C(痴心妄想)

Educational Codeforces Round 125 (Rated for Div. 2)

C

假如开头是 () 的话,直接匹配成功;如果是 (()),也直接匹配成功。

唯一的问题是 )(,我们考虑在一堆(之后的第一个 ),你会发现这样也匹配成功。

D

不难发现其实贡献只和乘积有关系,那你调和级数贡献一下,每次询问再二分就好了。

E

\(a_{i,j}\) 为 i 号点与 j 号点的边的边权,则题目条件等价为 \(a_{i,j} \ge \max(a_{1,i},a_{1,j})\),则从小到大确定每条边的边权 dp 即可。

F

一条链的限制相当于一个点有两种选择,那么为每个链建立虚点,做 2-sat 即可。


2022.3.26

今天打了 noi online,不挂分的话就是 300。(luogu 和 infoj 都是如此)。

如果省选也能发挥这么好就好了。

考完之后却没啥兴奋感,干啥都提不起劲儿,包括玩游戏。唉。

不过好歹那些题就只剩 2 道了,应该够时间过一遍知识树、vp 一下 cf(这个可能不太够?)

其实感觉自己这段时间还是挺有提升的,加上多出来的两个星期,自己说不定能翻?

加油吧。


2022.3.18

昨天晚上睡得不太好,梦见了之前省选考试的时候坐在我旁边的华附人。他应该是高二吧?考完 day1 就在桌上趴着哭。day2 的时候不哭了,而是一脸释怀的样子。

我会不会落得同样的结局呢?


2022.3.15

还剩两个星期,和一堆题……

今天的签到题大家都很快就切了,只有我执着于错误思路想了两个小时才换思路,而且一换就想出来了。

这样的状态怎么省选?


2022.3.12

今天 THUPC 打完了,rk 50,队伍 8 题 / 11 题,我 2 题,还切得贼慢,属于是拖后腿了。

能不能去北京旅游就全看天意了。

假瑞和谭哥他们那队好强啊,直接阿克了,还 rk 3。

也不想写啥题,睡大觉,摆大烂。


2022.3.11

今天中午睡觉的时候再次出现了“以为自己已经醒了然后发现没有”的过程,至少重复了 4 次。而且这期间做的梦还是个反社会人格的梦,在小学和初中的时候“我”各害死了一个人,然后高中被抓了。

是我精神状态有问题吗?还是单纯的压力大?讲题也不想听。

明天要打 THUPC,希望自己能加油,至少不拖后腿。


2022.3.7

题目,还有好多……


2022.2.22

感觉今天的比赛非常毒瘤,于是就来做了套 div2。可惜 F 看错题了,不然说不定能切掉。

哦,最近也有在补寒假课上剩的题,加油冲冲冲。

Codeforces Round #772 (Div. 2)

C

注意到 x<y<z,所以后两个没法改,先判掉;其次再考虑 \(a_n\) 是否 \(\ge 0\),如果是的话则可行,否则再判断是否已经非减即可。(操作: i n-1 n)

D

考虑转成二进制,就是个斐波那契,注意判断重复的数就好了。

E

有关系的点方向一定要相反,所以先黑白染色并判断;其次就是一些诸如“一堆点要在另一堆点的前面”的限制,这个建个虚点做个 toposort 就好了。

F

设比一个点 a 权值小且坐标比 a 小的点中,坐标最大的是 \(L_a\),比 a 权值小且坐标比 a 大的点中,坐标最小的是 \(R_a\),那么容易发现答案只会在 \((a,L_a)\)\((a,R_a)\) 们中产生。这个容易证明,考虑假如答案是 \((a,b)\)\(w_b \le w_a\)\(b\) 不是 \(L_a\)/\(R_a\),则把 a 换成 \(L_a\)/\(R_a\) 答案更优。于是扫描线就好了。


2022.2.11

春节期间上的课感觉并不怎么好,,,而且最近依然是天天划水,就补一下之前上课讲的题。

学校模拟赛也多,啥事都多,真的烦。


2022.1.30

Codeforces Round #768 (Div. 1)

A

主要关键点在你要发现 n-1 是个性质很好的数,它和任何人与都等于任何人,然后你分类讨论一下目标是否等于 n-1 就做完了。

B

因为要求是严格大于,所以一段的关键点最少比不关键点多 1,于是总量至少多 k。然后你容易发现总量至少多 k 是个充要条件,每次多 1 你就切一段,然后单独留下最后一段即可。

C

首先每种颜色肯定只有两端的有用,然后你就每次贪心留伸得最远的那种颜色就可以了。

D

你考虑最小操作单元就是 gcd,然后你按照模 gcd 的余数给下标分类(共 gcd 类),你会发现每一类下标的操作总数的奇偶性是相同的,然后你又发现这是个充要条件,你就能 dp 了。


2022.1.28

我妈今天说,我去wc连铜牌都拿不了。

我不能理解她为什么要这么说。她已经不是第一次贬低我了。

感觉平常她都挺正常的,啥时候别人取得了成绩就会来说我一通。

况且这次没有成绩和我有什么关系?他妈的。


2022.1.20

又好久不写日记了。

之前联考凭借运气切了一道题,感觉挺不错。

又报了个班,要卷卷卷了!!!自己要早点整理好资料啊!

博弈论啥的也要补补。


2022.1.13

啥也没干,就写假做法,改改题,腐腐败。

感觉自己欠了好多东西没做啊。


2022.1.11

老林你还我 wc 名额!!!!!

乐死了。

希望自己能加油去 NOI 拿牌!!!


2022.1.10

合着还真没比赛呗。

哈哈,昨天 vp 的 cf,E 题把 set 改成 multiset 就过了。乐死了。简单的 D 题也没做出来。

幸好没有打这场,否则掉大分。

哦对了,wc 改线上,听说我又能去了。老林你可别把我又坑一顿。

Hello 2022

C

你每次从前往后找第一个没访问过的点,不断地问直到把包含这个点的环找出来,把环上每个点打上标记,这样你就得到了每一个环,也就得到了答案。

D

考虑左下和右上的四个角落,你肯定可以通过这 8 个格子中的任意一个到达右下角(而且不需要走别的格子),而且你任意方案一定会经过这些格子。于是你就构造完了。

E

先按照年龄排好每个组,贪心地从小到大匹配前 m-1,让匹配的老师尽量小,然后比较一下当前最大值能否覆盖新加进来的组;然后删去第 m-1 组,加入第 m 组,让匹配的老师尽量小,然后再比较。不断重复这个贪心的过程即可。

Codeforces Round #759 (Div. 2, based on Technocup 2022 Elimination Round 3)

D

你手摸一下发现这个 3-cycle 的操作是不会影响逆序对奇偶性的(其实感觉这种东西挺好证,,,),然后你又能简单构造出一种方案:每次把最大的放到最后面,除了前两位不能任意放。于是只要原来是偶数个逆序对就可以了。同时注意相同元素的影响,有相同元素是可以改变逆序对奇偶性的(考虑赋位权)。

E

动态维护一下每个出现个数里面有的颜色数量的前缀和,边 dfs 边做,每次询问二分就好了。我不会 O(n),但反正能过。

F

这个题是考试原题的弱化版,O(nlogn) 的想法很简单,线段树维护一下,然后 O(n) 的话你就维护一下连续段就好了。(只用取负、全体加值,可以维护一个类似线段的东西)。显然最多就 O(n) 个连续段。

G

SG 函数板子题,后继状态就是所有切掉前面一段能达成的状态,于是你就(重)树剖一下,然后继承重儿子,对于轻儿子暴力扫,总体复杂度 O(nlogn)。


2022.1.9

乐死了,题改不动,再开 vp 也打得一团糟。

气死我了。退役算了。

哈哈,之前的那场 cf 也没补完。乐死了。

希望明天没有比赛!


2022.1.7

今日份的神仙模拟赛,真是绝绝子。2019 年的比赛,押中了 NOI2020 的题目。

是一道好题!会发博客。

什么昨天的 CF?今天的题我都没改完,还昨天。算了吧。


2022.1.6

新年快乐呀。这段时间全在打游戏,完全不想努力。

不过好处大概是,我现在就完全不想打游戏了。

今天 vp 了一场 div2,感觉还行,就是手速慢了亿点。毕竟一段时间没打了嘛。

题没改完,明天改完再写题解吧。

新的一年,说点俗套的话,还要多努力啊!


2021.12.25

麻了,这几天全在打游戏,基本没咋做题

然后今天五校联考也寄了,直接垫底。

咋回事,这是要退役了?


2021.12.20

好久没写日记了哼哼啊啊啊啊啊

上周果然是多事之周,一大堆屁事。准备补一补带花树和三维凸包的博客。

然后就是说把 Problem Share 的题给补完,然后看看之前学的知识点有没有什么可以补充内容的,当是复习了。

没得去 WC,但是能去 GDKOI,还是要好好准备一下。

哦,好久没有写 CF 题了!搞完这些东西,冲冲冲!

还有,饭堂开火锅了捏!今天去爽一下。


2021.12.14

没得去WC,你妈的。在学校睡大觉了。

不过自己CSP考得巨烂也是真的。好像自己没有考试考好过。

大概学了一下三维凸包,但是还没写东方鬼畜音MAD,大概会把三维凸包写个博客。

还有体测啊啊啊啊啊!烦死了!为啥上了高中还要跑一千米啊啊啊啊啊啊!还要去找班主任消分!啊啊啊啊烦死了啊啊啊啊啊!

靠,突然想起来带花树也没有写博客,妈的。找哪天补一补好了。


2021.12.10

“腰痛,不放比赛了”

至少,这场 edu 质量好多了。

Educational Codeforces Round 117 (Rated for Div. 2)

D

考虑这样一个过程实际上就是更相减损,于是做类似 gcd 的递归,然后中间判一下能否到达即可。

E

考虑到最后放的个数固定时,每个人的贡献也固定了,于是枚举最后放的个数,然后用堆维护即可。

F

经典套路:有两维时,我们可以把其中一维设成 dp 状态,另一维设成 dp 值。

考虑到答案比较小,我们设 \(dp_{i,j}\) 代表走了 i 步,第二维值为 j 时,第一维值最大能到哪里。\(n \geq m\) 时,答案最多为 \(\log + \frac{n}{m}\),总复杂度 \(O(m \log n + n)\)

G

拆出来每一位的系数,发现是 \(1-c_{i},3-c_{i},\cdots,c_{i}-1\),于是我们得到一个系数序列 P,我们所要做的就是把系数序列分配给 1 ~ n。不难发现从小到大分配最好(可以用微调法证明),于是桶排一下就好了。


2021.12.9

狗屁论文集,不如刷 CF 题 ᕕ( ᐛ )ᕗ

不过感觉这套 edu 质量非常拉。

Educational Codeforces Round 118 (Rated for Div. 2)

D

\(dp_{i,0/1}\) 代表之前的 mex 为 i,i+1 有没有被放入集合内,然后分类讨论转移即可。

E

普及组 dfs。

F

我们考虑容斥,枚举有几条边被钦定一定要满足条件,容斥系数显然为 -1。然后每个点都可以从自己儿子中选一个作为匹配的点或不选,直接分治 NTT 即可。


2021.12.5

好久没写日记了,每天浑浑噩噩的状态,又不多做题,不知道什么时候才能结束。

想学点什么,不如就从 IOI 2018 国家队论文开始学起?

不过也有开心的事,前几天的比赛有个题用了 round 757 C 的结论,真有用嘿。


2021.12.2

排名也出来了,烂死了。

昨天考试爆零了哈哈哈。不过幸好是学了个新算法(带花树)。

感觉最近巨颓,每天就是改个题,一点别的题都不做,哈哈哈。


2021.11.30

昨天又一道原题。我没有原题就垫底了呜呜呜。

noip 出分了,和我想象的一样烂。自己真的是不会乱搞。不过大概总的来说还是水平不够吧,毕竟连个差分都看不出来。


2021.11.28

昨天学校继续模拟赛,幸好有一道原题,然后 lc 又教了我一道题,排名还混得过去。

不过昨天和今天基本上处于颓废状态,今晚才开始学习。实际上大概一个小时就把上场 div2 的 D 和 E 写完了,感觉自己状态还是不太行。

题解:

Codeforces Round #757 (Div. 2)

C

题目保证有解,于是可以按位考虑,必填 0 的地方填 0,否则填 1,最后直接数 0、1 的子序列个数即可。

不过有个更妙的解法。考虑为 1 的子序列的个数,你会发现必然是从 1 里面选取奇数个,0 里面任意选,于是总的子序列个数就是 \(2^{cnt0} \times 2^{cnt1-1}\),即为 \(2^{n-1}\),只要这一位能填 1 即可。

(所以题目一大堆什么 \(l,r\) 的限制都是废的。)

D

不难想到 dp,设计 dp 状态:设 \(dp_i\) 表示目前最大 gcd 为 i 时的贡献,于是就有:\(dp_i=max\{dp_j+(i-j) \times cnt_i\}\),其中 j 为 i 的因数,cnt_i 为是 i 的倍数的数的个数。然后又发现这个 dp 显然可以只枚举质因数转移,于是设有用的状态为 \(m\) 个,总复杂度为 \(O(m \log \log m)\)。(埃氏筛)

E

裸题,线段树维护一下初始值对应的答案,不难发现总是单调的,动态开点即可。


2021.11.26

以前的题不大记得时间了,,,就随便记个时间点。

上午打了模拟赛,只写了个大家都降智的 A,超级大码量的 B 完全写不动,改了一个下午。

今天打了 round #757,很差。

先是上厕所,然后开场 1 分钟后才开题。

然后 C 很快就想出来了但是莫名其妙调了很久,最后换了个写法才过。

后面 D 脑子晕乎乎的,实际上是开黑的帮助下才会的,还只过了 D1,因为实现太粗糙了。

最后 20 min 想到了 E,然而码不完了。

发现自己码力实在是太差了,思考速度也是够慢的。

orz 一下 suyiheng,div 2 AK 了。自己水平不行啊!!!


2021.11.25 及以前

Codeforces Round #755 (Div. 1, based on Technocup 2022 Elimination Round 2)

A

考虑先对两个数组排一下序,然后只需判断相同下标的两位的差距是否在 1 以内即可。

B

可以先二分问出交换的结尾在哪里,然后再问(结尾-1)的位置,就可以知道后一段的长度,从而得到两段长度。

C

不难发现操作与顺序无关,于是 bob 赢的条件就是:\(a_l-a_{l+1}+a_{l+2}-...=0\),且中间没有一个前缀的值小于 0 。于是你只需要维护一个数据结构,支持删除权值最大的点、权值最小的点、数出权值为 x 的值的点的个数即可,可以使用 map 来维护。

D

考虑把每个字符在每个串内出现的次数是第一次或第二次压成二进制状态,当成图论的点,于是最多就有 \(2^n |S|\) 个点,其中 \(|S|\) 为字符集,建边细致一点,跑最长路即可。因为是 DAG,所以 DP 也行。

E

我们反向考虑,枚举线段的一个端点 \(p_i\),设另一个端点为 \(p_j\),第三个点为 \(p_k\),你会发现一个 \(p_j\) 合法,仅当它在所有以 \(p_k\) 为圆心,半径为 R 的圆与 \(p_i\) 的两条切线形成的夹角的交内。当然这不是充要条件,你还得满足另一边也满足(也就是 \(p_i\)\(p_j\) 交换位置)。于是就能做到 \(O(n^2)\) 了。


Codeforces Round #752 (Div. 1)

A

考虑每个数 \(a_i\) 能不能被 \(2\) ~ \(i+1\) 整除即可,一边遍历一边求 \(\text{lcm}\)

B

构造题。当 \(x>y\) 时,\(n=x+y\)\(x \leq y\) 时,\(n=y-\dfrac{y \% x}{2}\)

C

容易发现,你拆数的时候肯定是希望尽量平均,这样比不平均的时候至少不劣。于是考虑\(\lfloor \dfrac{n}{i} \rfloor\) 只有 \(O(\sqrt{n})\) 种取值,从前往后加入每个数,当不需要修改的时候 break,暴力修改每个数要被拆成几个数即可。


Educational Codeforces Round 116 (Rated for Div. 2)

A

要改的情况必为一奇一偶,然后分类讨论一下发现只用改一位就行了。

B

暴力凑,先两倍两倍增长,不够的时候就只能一次加上限个。

C

暴力凑,从小到大看看能否填满即可。

D

枚举分割线在哪一列,对两边的每一行分别做成一个二元组(最大值,最小值),然后排序,用 set 维护,看有没有左边的前面一段连续且不与别的相交,然后此时对应的右边一段也是连续且不与别的相交时,这就满足了条件。

淦你娘的,看错了好几次题。

E

\(dp_{i,j}\) 表示此时活着的人已经受了 \(j\) 次打击,还有 \(i\) 个人活着的方案数,利用组合数暴力转移即可。注意只剩一个人活着的时候不要转移。

F

显然每个点的贡献即为 \(c(u)-1-k\),然后我们每次要求的就是一个以 \(u\) 为根的最大权值连通块,这个可以暴力 \(dp\) 来搞。发现 \(k\) 很小,于是我们转而考虑 \(k\) 的变化带来的影响,显然的 \(k\) 变大时,连通块会变小,但是变小不好考虑,我们考虑反过来,\(k\) 从大到小,这样可以直接并查集维护每个点现在最远属于哪个点的联通块,每次先计算出每个点什么时候会和上面连起来,然后用树剖修改一条链的权值。注意一个点连好之后还要更新它所连到的连通块的情况。


Codeforces Round #751 (Div. 1)

A

按位置考虑,每一位上的 \(1\) 数量固定,于是答案必然为每一位上 \(1\) 的个数的 gcd,输出其所有因数即可。

B

考虑最短路的过程,你发现每条边权值为 \(1\),所以每个点最多进队一次,用 set 维护每个点有没有进过队就好了。

C

分类讨论可以证明,\(b_i\) 一定要从小到大插入。然后你可以证明,\(b_i\) 从小到大的时候,最优位置一定是不减的,于是你就可以分治。

D

玄妙贪心,和上一题类似,,,感觉这场非常垃圾

可以先按照 s 小到大排序,再按照 max(a,s) 小到大排序,然后你会发现这样很对。

E

容易想到一种最优策略就是,尽量买一直到有一个地方比我当前更优(相当于跳一步)。于是我们可以考虑对 %k 进行分类,每k位为一段,一段段地找跳一步所到之处,每一类用倍增预处理出来跳 j 步的最优解,然后询问的时候只需要对这种 %k 的类倍增地跳即可。

玄妙之处在于这样实现绕开了各种分类讨论的麻烦,,,

F

考虑前面一段相同的时候那个字典序一定是连续的,于是 dfs 预处理出来 \(1\) ~ \(1e6\) 的字典序顺序,再枚举左边的值,meet in the middle 即可。

注意模数上的细节影响。


Codeforces Round #750 (Div. 2)

C

暴力枚举每种删去的字符,再贪心地把字符加回来即可。

D

构造,偶数的时候不难想到把前后两项的系数交换过来,奇数的时候对于某三个数分类讨论一下即可。那个总绝对值 \(\leq 1e9\) 是来逗你玩的。

E

类似 round 752C,\(k\) 只有 \(O(\sqrt{n})\) 种取值,暴力记录尽量大的值即可。

F

F1 可以暴力记录异或值为某个数的最小结尾,然后 \(O(nV)\) 暴力 DP。

F2 显然不能这么做。我们考虑换一种想法:记录每个结尾的所有可能的异或值,初始化全部为 0。于是每次更新就会是一个后缀的更新,而且显然对于每个结尾来说一个异或值出现得越早越好,那么我们可以考虑再记录每个异或值能更新的最大结尾值,保证每个异或值对每个结尾都只贡献一次,这样就可以做到 \(O(n+V^2)\) 了。

G

考虑上一个右端点对应的简单子段的左端点集合,那么这次的新集合一定是(上一次的集合加上自己这个点构成的)集合的子集,而且不难发现一定是靠右的左端点先被丢掉(可以对每个质数分类讨论,类似括号序列的东西),于是对每个点暴力遍历所有质因数,去掉不合法的即可。

posted @ 2021-11-02 19:29  FakeDragon  阅读(108)  评论(0编辑  收藏  举报