水题乱做2

【CF 559D】Randomizer 考虑 pick 定理,S=a+b/2-1,我们要求的是 a,然后我们可以算出 S 和 b 的期望,然后就 ok 了

【CF 559E】Gerald and Path dp,f(i,j,k) 表示处理到第 i 盏灯,当前得到区间的右端点为第 j 盏的 k 状态,k 是个 01 变量,表示这个区间是向左还是向右,然后很好 dp

【AGC 010E】Rearranging 如果 A 排列好了,那么,可以建一个 DAG,即对于 i<j gcd(a_i,a_j)>1 的 i 向 j 连一条边,然后对于这个 DAG,每次贪心取最大的,于是乎,dfs 建图,从小到大枚举一个没有遍历过的点切 gcd>1 的点,然后连边,最后拓扑一下,每次拿最大的即可

【AGC 010F】Tree Game 考虑如果 Ai 比周围的都小,那么肯定先手必败,于是枚举一个根,算出每个节点的子树先手必胜还是必败,由于对于点 i 只会到 Aj<Ai 的 j 中,所以转移也很显然

【CF 739E】Gosha is hunting 首先有个简单的费用流解法,还有另一种做法,就是 wqs 二分,这玩意儿可以求出 g(C),g(x) 表示强制取 x 个物品的最值,要满足的条件是,g 是个凸函数,g 的最值比较好求,考虑证明,这个函数的导数显然是个单调递减的函数,那么 g'(x) 的零点就是 g(x) 的最值,我们二分的是 g'(x) 的上下偏移量,相当于是对于一个物品会多 mid 的代价,然后直到零点是 C 时,就可以求出 g(C),本题是个 wqs 套 wqs,复杂度可以做到 O(n loga logb)

【CF 765F】Souvenirs 主要就是一个剪枝,保证线段树的复杂度

【UOJ 188 UR13】Sanrd 稍微复习了一下 min_25 筛的思想

【CF 1307G】Cow and Exercise 有点神仙,考虑在建一个新图,对于原图上的边 (u,v,w),建一条从 u 到 v 流量为 1 费用为 w 的边,二分一个答案 mid,连接 n 和 1 流量为 inf 费用为 -mid 的边,然后不停增广,也就是的找负环,相当于是让最后的图不存在从 1 到 n 小于 mid 的路径,然后我们算出总费用,也就是 mid*flow-cost,对于一个限制 x,我们要求 mid*flow-cost<=x 的最大的 mid 即为 ans,所以对于每个不同 flow 更新下答案,有点混乱

【CF 1322D】Reality Show 考虑先把序列翻转,转化为求一个价值最大的非降子序列,考虑 dp,f(i,j,k) 表示前 i 个人,最大值 <=j,等于最大值的有 k 个,那么先枚举放或者不放,更新状态,然后 f(i,j,k) 更新 f(i,j+1,k/2),复杂度是对的

【AGC 009D】Uninity 贪心的让每个点放最小的,维护子树中还有哪些数到根的路径上没有比它大的数

【AGC 008F】Black Radius 我们需要不重复的统计每个点集,所以要统计 (u,d) 的个数,但是有限制,d<maxdeep(u),d<secondmaxdeep(u)+2,可以感性理解一下,否则会被算重,然后每个点还有一个下界,如果这个点是关键点,下界是 0,否则,就是删掉这个点的子树深度的最小值,也可以感性理解一下

【ARC 098F】Donation 每次去最大的 ai-bi 然后分治下去

【ARC 097F】Monochrome Cat 首先可以把度数为 1 的黑色不停的删掉,不会影响答案,然后先算出欧拉回路的答案,减去最大贡献的一条链,也就是带权直径

【AGC 018D】Tree and Hamilton Path 考虑求一个最大的哈密顿回路,显然上界是 sum(2*Wi*min(sz1,sz2)),发现这个可以达到的,然后看重心,如果两个重心,那么肯定只能两个重心之间的边被删掉一次,否则删掉重心到某个儿子的一个边,找个最小的即可

【CF 643G】Choosing Ads 考虑 p>50 的情况,那么就是区间众数,可以每次取出不同两个数,最后剩下的一个数就是答案,同理,对于任意的 p,我们每次取 100/p+1 个不同的数,最后剩下的最多 100/p 的,这些数中肯定有答案

【CF 1034D】Intervals of Intervals 二分第 k 大的长度,考虑枚举右端点,显然,对于一个右端点,最短点的答案是单调不升的,所以可以 two-pointer 扫一下,算出有多少比它小,一开始有个预处理就是加入这个右端点,会造成哪些影响,显然是对一些 >=x 的 l 加上一个数 y,然后求和嘛也挺好搞的

【CF 1034E】Little C Loves 3 III 考虑对于每个 ai,bi 乘上 4 的 popcount(i) 次方,然后做一次 fwt,最后输出 ci 除以 4 的 popcount(i) 模 4,发现这个是对的,因为出现两次的话贡献就成了 0

【CF 958E3】Guard Duty (hard) 每次找 y 最小的点,找一个匹配点,划分成两个部分,继续递归,复杂度看上去不对,但是大概卡不掉

【AGC 041D】Problem Scores 设 A 的差分数组是 a,a0=1,容易发现 a1>=[a2,a3,a4,...,an]·[0,1,2,3,...,3,2,1],a1<n-a1-a2-...-an,然后这个可以 dp 一下

【AGC 043C】Giant Graph 考虑每个图小的向大的点连边,问题转化为一个博弈论的题目,然后求出 sg 值(暴力复杂度正确,因为 sg 值是 O(sqrt(n)) 的),最后暴力合并

【UOJ 266】【清华集训2016】Alice和Bob又在玩游戏 考虑删掉一个点的 sg 值是剩下子树的 sg 值的 xor,因此只要维护 trie 树支持加入一个点和合并,查询 mex 即可

【LOJ 6627】「XXOI 2019」等比数列三角形 搞一搞范围,随便算一下,抄一下题解就过了/xyx

【LG 3547】[POI2013]CEN-Price List 显然可以先让 b 对 2a 取个 min,这样,答案就是两种情况,b*(dis/2)+a*(dis%2);kb; 第一种情况 bfs 一下就可以算了,后一种情况,我们也是 bfs, 就是这个 bfs 一次走两个点,我们枚举当前点 u 的后继 v,v 的后继 w,然后更新,push 进队列,但是这样复杂度不对,我们发现这个 v 到 w 的边如果更新了 w,那么这条边就可以删掉了,于是建两个图,一个是原图,一个是删边删剩下的图,总的复杂度是 sum min(deg(u)^2,m)<=sum sqrt(deg(u)^2*m)=sum deg(u)*sqrt(m)=O(msqrt(m))

【ATC diverta2019_2 F】Diverta City 考虑每次加一个点 i,设当前最大的一条路径为 M,那么 i 向 j 连边 (M+1)*F(j), F 是预处理出来的一个东东,满足任意 Fi+Fj 不同

【ATC diverta2019_2 E】Balanced Piles 我们给所有同一个高度的定一个顺序,所以每次取的那个肯定是唯一的,而我们要增高的那个,可以转移到当前的这层,那么会有一个(当前层的点的个数+1)的方案给它在这一层里定一个顺序,也可以转移到下一层,那么只有一种方案,其它的比较简单,这里不展开

【UOJ 94】【集训队互测2015】胡策的统计 集合幂级数的模板题,这里简单总结一下集合幂级数,定义 \(g_s\) 表示 \(s\) 的图的个数,显然 \(g_s=2^{cnt}\), 然后定义 \(h_s\) 表示 \(s\) 的联通图的个数,容易发现:

\[g+1=\sum_{i\ge 0}\frac{h^i}{i!}=\exp(h)\\ \ln(g+1)=h \]

通过 g 可以求出 h,然后发现答案其实是

\[f=\sum_{i\ge 0}\frac{h^i}{i!}i!=\frac 1{1-h} \]

于是求逆一下就好了

【CF 1276F】Asterisk Substrings hy 考场就切了,不带 * 的很简单,带有一个 * 的可以看成,i-1 对应 的点在 parent 树上到根的链和 i+1 对应的点在反串的 parent 树上的链并,用 set 维护,启发式合并即可,鸽了那么久的题终于会了

【AGC 044C】Strange Dance 建一棵三进制 trie 树,与平常的不同,这棵树是从低位到高位的,这样所有问题都迎刃而解了

【AGC 045B】01 Unbalanced 考场上做不来,这里有个暴力的二分做法,就是二分这个答案,然后用一些神奇的方法 check,维护两个值,最小值为 0,当前值最小是多少,和最大值为 mid,当前值最大为多少,要考虑一下奇偶性

【AGC 045C】Range Set 用总的减去不合法的,不合法的就是把全部长度为 A 的 0 变为 1 后,连续的 1 不超过 B,dp 一下

【LG 5279】[ZJOI2019]麻将 dp 套 dp,首先先 yy 一个胡牌自动机,所有的胡牌都能够识别了,然后爆搜状态,状态数很少的,然后再在自动机上 dp,具体的就不讲了

【LG 5280】[ZJOI2019]线段树 对于 5 种不同的点分类讨论即可,我也不知道为啥我分类讨论能力这么不行/kk

【LG 5327】[ZJOI2019]语言 十分的 simple,讲一个一个 log 的做法,我们对每个点算有多少点会对这个点造成贡献,我们只要把经过这个点的路径的端点提取出来,求个虚树,虚树上的点就是会有贡献的点,然后就可以先树上差分一下,然后线段树合并,线段树的下标是 dfs,两个段合并算出虚树的大小,累计到答案

【LG 5326】[ZJOI2019]开关 生成函数瞎搞,还可以形式幂级数,这个做法很优美,可以看博客里的推导,这里不讲了

【CF 1361E】James and the Chase 考虑如何判断一个点是否到所有点有唯一路径,显然满足条件当且仅当以它为根的生成树只有一棵,我们不停随机,直到找到一个满足条件的点,然后对于一个点,如果它的子树中的点可以跳到两个祖先,那么这个点肯定是不合法的,因为可以有至少两条路径从这个点到深度大的那个祖先,否则的话,这个点是否合法取决于它子树能跳到的那个祖先,然后所有点都可以求出来了

【CC】PPARTS 考虑描述成多项式,然后 ln 一下,其中 \(\ln(1-x)=-\sum_{i\ge 1}\frac{x^i}i\),然后发现一个 ai 只会对有 n/ai 个位置有贡献,就没了

【CC】PPDIV 容易发现是个容斥的形式,对于指数是 2 要稍微特判一下

【CC】FCTRE naive 的树上莫队

【CC】SORTVS 先把等价类合并起来,然后相当于把等价类之间的边找到一个最大的划分,使得每个划分是个循环,我们枚举这个划分,对于一个集合,要有一个大小为 k 的划分,首先要有一个大小为 k-1 的划分,并且存在一个它的子集有大小为 k-1 的划分

【AGC 029E】Wandering TKHS 我们考虑 c(i)-c(fa(i)) 的值是多少,令 Q(i,j) 表示 i 的子树中有多少个点能通过编号不超过 j 的点到达,如果 i>mx(fa(i)) 那么 c(i)-c(fa(i))=Q(i,mx(i))+1,否则 c(i)-c(fa(i))=Q(i,mx(i))-Q(i,mx(fa(i)))

【AGC 037E】Reversing and Concatenating 在 k=1 的时候,肯定是直接找最小值,在 k>1 的时候,是找最小值然后反转赋值给 s,这样末尾的最小值的字母每次至少翻一倍,所以是 O(log) 次的

//【AGC 025D】Choosing Points 发现距离为 sqrt(D) 的点是个二分图,所以对每个 D 染色,根据抽屉原理,发现至少有一个颜色对是大于 n^2 的

【CF 555E】Case of Computer Network 考虑缩点,然后给边定方向,用子树的入度和出度判断是否有矛盾

【CF 576D】Flights for Regular Customers 枚举每个时间点,搞成矩阵乘法的形式,用 bitset 优化一下

【CF 512D】Fox And Travelling 考虑变成若干个有根树和无根树的形式,然后有根树树上背包,无根树对应方案数除以 sz-i,因为一种 i 个点的方案会被算 sz-i 次

【CF 547E】Mike and Friends 考虑离线后建 AC 自动机,转化一下,求一个串在前缀所有串出现了多少次,在 fail 树上搞个 dfs 序,用树状数组单点加区间求和即可

【CF 1383C】String Transformation 2 状压,发现答案是 2n-连通块个数-|最大DAG|

【LG 6049】燔祭 考虑对于一棵固定的树,他的答案可以 dp 出来,并且是个关于 m 的 n+1 次多项式,进而发现答案也是个关于 m 的 n+1 次多项式,然后就好搞了

【LOJ 6247】九个太阳 单位根反演裸题

【LOJ 6673】EntropyIncreaser 与山林 先算出不一定联通的,然后再 ln 一下

共 50 题

posted @ 2020-01-27 20:26  xay5421  阅读(61)  评论(0编辑  收藏  举报