寒假做题不完全记录(持续更新)
寒假做题不完全记录(持续更新)
12.30 \(\sim\) 1.1
摆。
1.2
P4155 国旗计划
发现线段按左端点排序后右端点单调递增,所以可以确定每条线段最优的下一条,倍增求出每条的下 \(2^k\) 条,查询时倍增到 \(d_i<c_i+m\) 即可。
P4562 [JXOI2018]游戏
将所有数分为关键数,即不包括本身的倍数不在 \([l,r]\) 的数,和非关键数,答案即为最后一个关键数的位置。可由求所有关键数后的非关键数个数得到答案为
1.3
P6076 [JSOI2015]染色问题
容斥,大力推式子。
1.4
CF1446D1 Frequency Problem(Easy Version)
首先发现答案区间的众数一定包括整体的众数 \(x\)(可用反证法,考虑从整体众数不是区间众数的区间扩展,发现一定会有更大的),因此可以枚举除全局众数外的另一个众数 \(y\),计算前缀和,遇到 \(x\) 就 \(+1\),遇到 \(y\) 就 \(-1\),看和为 \(0\) 的最长区间长度是多少。一个区间中 \(x\) 的出现次数与 \(y\) 出现次数相等且有 \(z\) 出现次数更多不会有影响,同样可以扩展发现更大的。
CF785D Anton and School - 2
推式子+容斥,用到组合数积之和化简。
1.5
CF856C Eleventh Birthday
一个数除以 11 的余数等于奇数位数字和减偶数位数字和,\(f_{i,j,k}\) 表示前 \(i\) 个奇数位 \(j\) 个开头是偶数位,求和奇减求和偶等于 \(k\) 的方案数,\(g_{i,j,k}\) 同理,最后把偶插到奇里。
1.6
UVA1608 Non-boring sequences
记录每个元素 \(a_i\) 的下一个相同的位置 \(nxt_i\) 和上一个 \(lst_i\),容易发现对于任意 \(l\in(lst_i,i],r\in[i,nxt_i)]\),区间 \([l,r]\) 中 \(a_i\) 出现且仅出现了一次。因此合法区间数可以转化成对角顶点为 \((lst_i+1,i),(i,nxt_i-1)\) 的矩形并的面积。
P2424 约数和
原问题可以转化成
,数论分块即可。
CF1367F1/AGC024B
观察样例发现答案为离散化后 \(n-\) 最长每次上升 \(1\) 的子序列长度。
1.7
P2260 [清华集训2012]模积和
大力推式子+二维数论分块。
CF208E Blood Cousins
用长剖求 \(k\) 级祖先,再跑 dsu on tree。
1.9
P5999 [CEOI2016] kangaroo
见题解。
CF704B Ant Man
和上题类似。
1.10
入门了网络流。
P1345 Telecowmunication
把一个点拆成两个,一个连入边一个连出边,两点间连容量为 \(1\) 的边,其他边容量 inf,即转化成最小割。
P2857 Steady Cow Assignment
二分最小跨度,枚举可选区间起始点,把可选区间内的连边,建超级源和超级汇,牛棚和超级汇之间连容量为牛棚大小的边,跑最大流。
P2057 [SHOI2007] 善意的投票
二者取其一式问题。将源连向同意的,汇连向不同意的,朋友间连双向边,跑最小割。
1.11
新开了网络流 24 题做题记录。
P3033 Cow Steeplechase
把源点连向横向边,纵向边连向汇点,横纵相交的线段相连,跑最小割点。
CF623B Array GCD
由于不能全删了,所以 \(a_1\) 和 \(a_n\) 中至少有一个不被删,枚举它们和它们减一加一的质因数,dp 即可。
P7251 [JSOI2014] 强连通图
第一问答案即为最大强连通分量大小。由于一个强连通图各顶点入度出度都不为 \(0\),因此将 DAG 变为强连通图需要的最少边数就是入度为 \(0\) 的点数和出度为 \(0\) 的点数的最大值。原图缩成 DAG 后直接做即可。
1.12
P8346 最澄澈的空与海
发现一个二分图有且仅有一种完美匹配的一个必要条件是存在度为 \(1\) 的点(可用反证法证明)。于是每次找到度为 \(1\) 的点,删去它和它唯一的边对面的点,若最后删完说明有且仅有一种。
1.13 \(\sim\) 1.27
摆,没做几道题,懒得记了。
1.28
CF1197E Culture Code
按 \(in\) 升序排,发现每个套娃能放入的套娃是一个后缀,线段树维护区间最小值和最小值个数即可。
CF1198D Rectangle Painting 1
分治,一个矩形可以整体覆盖,也可以竖着分成两块分别覆盖也可以横着分,记忆化搜索即可。
CF1204E Natasha, Sasha and the Prefix Sums
设 \(f_i\) 为最大前缀和等于 \(i\) 的方案数,答案即为 \(\sum f_i \times i\),但是 \(f_i\) 不好求,于是可以设 \(g_i\) 为最大前缀和大于等于 \(i\) 的方案数,差分一下就是 \(f_i\)。求 \(g_i\) 可以转化成求从 \((0,0)\) 到 \((n+m,n-m)\) 每次位移是 \((1,1)\) 或 \((1,-1)\) 且路径与直线 \(y=i\) 有交点的路径数,发现若起点终点在直线两侧则必有交点,怎么走都可以,若在同侧可以把起点关于 \(y=i\) 对称一下,这样起点终点就在异侧了,路径必与直线有交点,发现第一个交点前的路径关于直线对称后整条路径正好是从原起点到原终点且与直线有交点的路径,组合数算一下即可。
1.29
CF1200F Graph Traveler
发现如果只有一次查询直接 dfs 即可。又发现每个点出度不超过 \(10\),于是每个 \(y\) 对 \(1\) 到 \(10\) 的 lcm 取模结果不变。发现这个 lcm 很小,是 \(2520\),于是枚举起始点和起始值,记忆化搜索即可。
CF1217E Sum Queries?
一个好的子序列每一位有值的数最多有一个,因为假设一位有更多的数有值,那必然会产生进位,进到前一位后还会产生进位,最后位数会变多。于是一个坏的子序列只要存在一位有值的数大于等于两个即可。对每一位开一棵线段树记录这位有值的数的最小值和次小值即可。
CF1032F Vasya and Maximum Matching
发现去掉一些边之后一棵树会变成许多彼此独立的树。对于一棵树,它仅有一种最大匹配当且仅当它的最大匹配包含所有点。于是设 \(f_{i,0/1/2}\) 为以 \(i\) 为根的子树,\(i\) 独立 / 匹配儿子 / 匹配父亲。独立的很好转移;匹配儿子的就枚举匹配哪个儿子,剩下的儿子要么独立要么与它儿子匹配,若与它儿子匹配,则这条边删不删都可以;匹配父亲的儿子要么独立要么与它儿子匹配,若与它儿子匹配,则这条边删不删都可以。
1.30
CF1088E Ehab and a component choosing problem
发现原问题就是选 \(k\) 个连通块使每个连通块内点权和的平均值最大,易发现选点权和最大的一些连通块最优。第一遍 dfs 算出以每个点为根的子树内连着根的连通块最大点权和,第二遍 dfs 算个数,选中的就标记不再被选了。
CF1151F Sonya and Informatics
\(f_{i,j}\) 表示操作 \(i\) 次,\(j\) 个 \(0\) 放到合法位置的方案数,随便转移矩快优化即可。
P4366 [Code+#4]最短路
发现异或的边可以被一些 \(u\) 到 \(u\ xor\ 2^k\) 替换,建图后跑最短路即可。
CF1093F Vasya and Array
\(f_{i,j}\) 表示前 \(i\) 位,第 \(i\) 位放 \(j\) 的方案数,从 \(\sum f_{i-1,k}\) 转移,如果以 \(i\) 结尾的长度为 \(len\) 的区间不合法,就减去 \(\sum\limits_{k\neq j} dp_{i-len,k}\)。