CF 题解乱写

2021.9.23

昨晚由于不明原因所以觉得今天请假军训去实验室划水

https://codeforces.com/gym/103202/problem/I

考虑把时针和分针每分钟转过的角度同时乘以 $ frac{HM}{2Pi } $

所以现在要统计0<=t<HM

t*(H-1)  mod HM <=A         以及    t*(H-1)  mod HM >=HM-A

发现t连续且取遍模数

设G=gcd(H-1,HM)

式子左右两边同时除以G

t*(H-1)/G mod HM/G<=A/G

每个循环有HM/G个,其中每个循环贡献A/G+1次(下取整)

共有G个循环

ans=G(A/G*2+1)

https://codeforces.com/gym/103202/problem/D

设r为1,b为0

记录一个前缀和sum

[l,r]对答案有贡献则说明sum[r]与sum[l-1]奇偶性不同

显然最大的答案即0,1尽量数量相同

100个方案且保证字典序考虑爆搜剪枝

https://codeforces.com/contest/1573/problem/E

每种颜色最多有20个位置,是个很好的性质

考虑一个长度为len序列最差可以通过len-1次操作变为同一颜色

基于上述

设dp[l][r]代表使[l,r]变为同一颜色可以节省的最多次数

两种转移

dp[l][r]=dp[l+1][r]

dp[l][r]=max(1+dp[l+1][k]+dp[k+1][r])  (a[l]=a[k])

即l,k颜色相同,只用一次操作把中间的变为a[l]

https://codeforces.com/contest/1573/problem/F

对于两个可以配对的点

他们一定有且只有一位不同

所以他们的1的数量的奇偶性不同

原图便成为了一个二分图

显然边的数量过多,只需要2nk条最长的边即可

卡常了?(确信

2021.9.24

通过不明手段套了考勤人员的近乎所以就逃训了

https://codeforces.com/gym/103104/problem/I

A,B为x,L,R为y转化为矩阵

即n*n矩阵ban掉一些点

求合法矩阵方案数

考虑用单调栈维护up[i][j]代表(i,j)向上最远可以延申几个

维护a单调递减的栈即可用新的a[i][j]和栈顶的位置更新答案

https://codeforces.com/gym/103104/problem/D

枚举值域区间[L,R]

在原序列上必须是小于等于两段的区间

可以O(1)更新答案

https://codeforces.com/gym/345274/problem/C

长度为n的序列

要求取出一或两段区间

要求区间并之后没有颜色重复

最大化并之后的长度

很显然的一个思路是枚举第一个区间

用set维护出现过的颜色对应的所有位置和两个位置之间的最大长度

问题在于这段长度对应的区间[L,R]可能自身存在重复的颜色

设dp[L][R]代表[L,R]最长的合法区间的长度

可以$O(n^2)$预处理出来

这样维护dp值而不是区间长度即可

https://codeforces.com/gym/345274/problem/G

按边权排序

每次合并两个连通块

建一个虚点

让两个根作为儿子

每次查询相当于查一个子树的众数

可以启发式合并解决

https://codeforces.com/gym/103202/problem/M

给n个长度为m的01字符串

问有多少个位置的集合S

满足至少有k对字符串在S中的位置不安全相同

m<=20

n<=1e5

设$f[S]$代表字符串中为$S$的个数

$g[S]=sum_{x,y,x Xor y=S} f[x]*f[y]$

可以FWT做

$h[S]=sum_{x,x And S!=0} g[x]$

$h[S]=n^2-sum_{x,x And S==0}g[x]$

高维前缀和即可

一个无向图

n<=300

对于每个点求出包含这个点的最小环的长度

直接跑最短路,然后枚举两个点且连边会有一个问题就是无法解决经过重边

考虑对于每个点建出一棵最短路树

一个合法的环一定是树上两个lca是根的点到根的距离和加上两点之间的边

原文地址:https://www.cnblogs.com/AthosD/p/15327306.html