短暂的OI生涯,也许就只剩三个月了,如果NOIP2020挂了,我就真的要被强制退役了。为了不被强制退役,鸽子博主也爬了起来
8.12
loj2012「SCOI2016」背单词
倒序放到trie树上,贪心选取(每次走最小的子树)
loj2013 「SCOI2016」幸运数字
树剖加线性基暴力合并
loj2014「SCOI2016」萌萌哒
倍增优化并查集
loj2015「SCOI2016」妖怪
推波柿子,发现是对勾函数取max,实数二分即可
loj2016「SCOI2016」美味
把01trie的理解变成值域上的理解,区间加就是查询范围平移,主席树一波即可
loj2017 「SCOI2016」围棋
大力轮廓线dp,转移要用下kmp
zroi252 亵渎
考虑最后亵渎,状态一定是a1个1,a2个2,……,ai个i,设\(f_{i,j}\)表示前i个人,连续最大为j
zroi253 绕口令
如果有相同的,对于每个子串的每个border是不可达到的;如果没有相同的,对于每个可能的循环节长度x,x+1是不可达到的
zroi254 最远点
lct维护子树最远,每个点,给每个虚儿子到子树最远建个set,更新就比较实儿子和set中最大。定点最远,把定点转到跟,搜出最长路径,联通块直径,把刚才最长路径末端转到跟,再搜出最长路径
zroi255 世界杯
挺麻烦的,推推柿子,然后二分一下
zroi256 数组
不能有相同元素,维护pre和nxt,以i为结尾的子区间的个数为\(i-\max_{j=1}^i pre_j\),吉司机线段树维护即可,单次修改只会改三个点的pre
zroi257 淘汰赛
大概只会20pts的生成函数部分分,后面的优化听得云里雾里
zroi258 友谊巨轮
对于每个人开个set或动态开点线段树,暴力即可
zroi259 璀璨光滑
随便构造一组解,发现珂以把所有的某位二进制交换,贪心即可
8.13
AGC047B First Second
倒序建trie即可
AGC047C Product Modulo
g=2,模意义下乘变加,自己卷自己
AGC047D Twin Binary Tree
枚举lca,暴力处理即可
AGC047E Product Simulation
构造题(造计算机题)
AGC046B Extension
简单容斥dp
loj2018「AHOI / HNOI2017」单旋
考虑将min和max旋转到根的过程,答案就是深度,对树结构影响不大,区间深度的同加减1的,线段树或树状数组维护,插入用set找前驱后继
loj2019「AHOI / HNOI2017」影魔
考虑对于每个点,用单调栈求出左右最近比它大的L[i],R[i],贡献就能变成区间加的问题,配合上扫描线,就珂以把询问变成两个时刻的答案之差
loj2020「AHOI / HNOI2017」礼物
经典题,把柿子写一下,除了定值之外,发现有项长得像卷积,配合上旋转,就变成求卷积系数max,fft即可
loj2021 [AHOI2017/HNOI2017]大佬
怼只有两次并且没有必然联系,预处理状态,双指针扫出最优解
loj2022「AHOI / HNOI2017」队长快跑
发现射线方向不重要,只看上下,求最短距离,上下都维护单调队列
loj2023「AHOI / HNOI2017」抛硬币
分析一波,得出一个组合式子,先利用网上博客说的范德蒙德卷积(实际是课内数学),把问题变成求组合数的和,这里用ex卢卡斯处理
8.14
今天开学了,去见班主任废了不少时间()
loj2024「JLOI / SHOI2016」侦查守卫
树形dp
loj2025「JLOI / SHOI2016」方
容斥一下,随便数数数,记得正方形可以是斜的
loj2026「JLOI / SHOI2016」成绩比较
人数分数分别容斥推柿子,用了一个\(\sum_{i=1}^ni^k=\sum_{j=0}^k\begin{Bmatrix}k\\j\end{Bmatrix}\frac{(n+1)^{\underline {j+1}}}{j+1}\),感觉这个我不看题解是真的不会
loj2027「SHOI2016」黑暗前的幻想乡
大力容斥套矩阵树定理
loj2028「SHOI2016」随机序列
仔细考虑性质,发现只用考虑前缀积,后面的都会因为+-而消失,单点修改变成区间(后缀)乘,线段树维护
loj2030「SDOI2016」储能表
打表找规律后分治求解,或者按位dp
loj2031「SDOI2016」数字配对
每个数分解质因数,对质因数次数求和,两个数能配对,当且仅当两数有倍数关系且次数和差一,按次数和奇偶分类,跑最小费用最大流,注意费用要不小于0
loj2032「SDOI2016」游戏
区间加等差数列区间最小,李超线段树维护,放到树上,套个树剖,以前写的题解
8.15
loj2033「SDOI2016」生成魔咒
倒序建sa统计/sam统计新增节点带来贡献
loj2034「SDOI2016」排列计数
就是求下错排,大概普及t2难度
loj2035「SDOI2016」征途王道征途,推个朴素dp,发现可以斜率优化
AGC044A Pay to Win
倒序记搜
AGC044B Joker
暴力01bfs
AGC044C Strange Dance
zroi出过这个套路,就是在trie上打标记
AGC044E Random Pawn
画图找结论,发现结果在凸包上
8.16~8.22
军训,看了看李煜东的书,发现很多细节我都没注意到过(比如树状数组上二分,今年联考就考了)
loj2036「SHOI2015」自动刷题机
直接大力二分
loj2037「SHOI2015」脑洞治疗仪
曾经写过珂朵莉树,大力线段树显然可以实现
loj2038「SHOI2015」超能粒子炮・改
首先考虑卢卡斯定理,因为卢卡斯定理有整除2333,那么考虑整除分块,那样递归下去求解
loj2039「SHOI2015」激光发生器
计算几何模拟,口胡容易()
loj2040「SHOI2015」零件组装机
乱搞题,尝试将图分成俩子图求解
loj2041「SHOI2015」聚变反应炉
树形dp,考虑父亲和儿子的先后顺序,转移过程还要套个背包
loj2042「CQOI2016」不同的最小割
建最小割树,用set求不同边权数量
loj2043「CQOI2016」K 远点对
不会KDT,乱搞思路类似旋转卡壳()
loj2044「CQOI2016」手机号码
就是根据题目条件大力数位dp
zroi503 终
考虑贡献的式子,发现是个叉积形式,构造出有向三角形面积,要最大,发现凸包合法,就是求凸包面积
8.23
loj2045「CQOI2016」密钥破解
先Pollard-Rho质因数分解算出p,q,算出r,用exgcd算出d即可求出答案
loj2046「CQOI2016」路由表
建trie,查询在trie数上走,使用单调栈,保证时间单增
loj2047「CQOI2016」伪光滑数
整个堆,如果最大质因数次数大于1,就将它换成比他小且最大的质因数加入堆里
zroi515 图
设一个点权为x,暴力解出范围即可
zroi516 车站
设f[i][j]表示看到i号车站,前面掉了j次头最小代价
2020多校10
C Mine Sweeper
通过3*3的格子构造
D Permutation Counting
大概就是SAO那题树退化成链
E Treecutting
枚举中心,点分治统计
F Divide and Conquer
先随便找条水平线,二分第二条线的斜率
G Coin Game
将硬币分成a和a+b/2,按性价比排序,贪心取
J I do not know Game Theory!
将两个不同行不同列取完后,就变成了普通nim,行或列有取完的要记得-1
K Task Scheduler
按照所需人数从大至小排序
loj2048「HNOI2016」最小公倍数
对一维值域分块,另一维排序,分块维护
loj2049「HNOI2016」网络
对重要值整体二分
loj2050「HNOI2016」树
真·树套树,考虑把每部分缩成点,建个大树,答案分解成大树上贡献和模板的贡献
8.24
自闭了一天(主要是loj来了月经,开了套zroi的ZJOI膜你赛)
zroi512 土地改革
实数二分,贪心摆放check,最后暴力实数转分数
zroi513 两弹一星
考虑结果,将指数转化为第二类斯特林数和下降幂的形式,发现对答案有贡献联通块数小于等于k,考虑f[i][j]表示i个点,j个联通块是树的方案数,这个dp可以用NTT优化转移,对于有j个块情况,答案实际均摊到f[][0~j]上了,正常统计即可
loj2051「HNOI2016」序列
考虑莫队,转移代价用单调栈预处理
loj2052「HNOI2016」矿区
平面图转对偶图,取生成树,树上差分即可
loj2053「HNOI2016」大树
分类讨论,2和5看末尾算,其他的使用莫队,需要两个后缀同余,问题转化成区间相等数对的对数
AGC041C Domino Quality 构造
AGC041D Problem Scores
仔细思考题目限制,珂以将问题变为前一半大于后一半,列出dp,前缀和优化
AGC041E Balancing Network
对于1,bitset暴力检查,对于2,大于等于3都行,构造下即可
AGC040C Neither AB nor BA
发现要删AB的话,AB奇偶性一定不同,将偶数位置AB互换,不能出现AABB,总数减去A和B分别超过一半个数即可
loj2054「TJOI / HEOI2016」树
显然可以树剖/LCT,但是太麻烦,考虑倒序并查集
loj2055「TJOI / HEOI2016」排序
1.线段树合并分裂 2.二分答案,将原序列转化为01序列,这样排序就很方便
loj2056「TJOI / HEOI2016」序列
正常dp,有限制,cdq优化
8.25
毕竟是鸽子日记()
loj2057「TJOI / HEOI2016」游戏
套路的建图,套路的网络流
loj2058「TJOI / HEOI2016」求和
考虑将第二类斯特林数换形式,最后发现是个卷积形式,NTT即可,题解
loj2059「TJOI / HEOI2016」字符串
二分长度mid,求出rak的区间,主席树上判定是否有属于这个区间的rak
loj2060「HAOI2016」食物链
裸的拓扑排序
loj2061「HAOI2016」放棋子
障碍每行每列有1个,交换下顺序,能换成在i行i列,问题就变成了求错排数,高精即可
loj2062「HAOI2016」地图
看到仙人掌,直接圆方树,剩下的可以线段树合并/dsu/莫队之类的算法求出
loj2063「HAOI2016」字符合并
只有01,且合并区间长度很小,考虑区间dp和状压结合
loj2064「HAOI2016」找相同字符
求lcp长度之和,可以用合起来的串的贡献减去两个串单独的贡献。height性质很优美,求贡献时运用单调栈
loj2065「SDOI2016」模式字符串
可以拼接,所以点分治,判断相等哈希即可,卡常
loj2066「SDOI2016」墙上的句子
最小割,建图不在此赘述
8.26
咕咕咕,SDOI不可做
loj2069「SDOI2016」齿轮
带权并查集即可
loj2071「JSOI2016」最佳团体
分数规划,然后树上背包判断
loj2072「JSOI2016」独特的树叶
树上hash,无根树,换根转移
loj2073「JSOI2016」扭动的回文串
在A串B串中枚举回文串,二分加哈希扩展
loj2074「JSOI2016」灯塔
不用决策单调性,根号暴力即可
2
loj2075「JSOI2016」位运算
考虑状压出单独一段状态,构建矩阵,矩阵快速幂
loj2076「JSOI2016」炸弹攻击
模拟退火是屑,明天补计几做法
8.27
loj2076「JSOI2016」炸弹攻击
考虑最优状况,一定有敌人在圆上。分两类处理,第一类圆的半径为R,选择一个敌人作为圆周上的点P,考虑对于每个建筑和敌人,求出圆心相对于P的角度范围,扫描一下即可得出答案;第二类圆的半径小于R,对于每个敌人,枚举两个建筑,二分出圆的最大半径,求出答案
loj2077「JSOI2016」飞机调度
考虑用floyd求出i到j的最短时间,判断两个航班是否能同一架飞机完成,连边后是个DAG,求最小链覆盖,网络流即可
loj2078「JSOI2016」无界单词
先求出无界单词数量的递推式,求第k时按位考虑,假设是a,对比目标排名和钦定是a的方案数,大力计算
loj2079「JSOI2016」轻重路径
不知道为啥现在网上主流做法变成了离线,写的又臭又长。考虑二叉树的性质,是重儿子的话,siz一定大于等于父亲siz的二分之一,二分去维护
loj2080「JSOI2016」病毒感染
大力dp,放个别人题解地址
loj2081「JSOI2016」反质数序列
分奇偶建图,和为质数连边,求最大独立集(不知道为啥当时想起了零糖麦片 )
loj2082「JSOI2016」炸弹攻击 2
每个S做极角排序,双指针扫一扫,前缀和查询贡献
AGC039B Graph Partition
判定二分图,大力搜索
AGC039D Incenters
取两点间弧的中点构成的三角型的垂心的期望,垂心期望由欧拉线得出
8.28
咕咕咕
loj2083「NOI2016」优秀的拆分
算下以某点开头/结尾形式为AA的串的数量,枚举A的长度,设置关键点,sa求LCPLCS,区间加用差分实现
loj2084「NOI2016」网格
就是随便讨论讨论
loj2085「NOI2016」循环之美
杜教筛,别人详细题解
loj2086「NOI2016」区间
按照区间长度排序,twopointers加线段树维护
loj2090「ZJOI2016」旅行者
考虑分治,每次从长边中点断开
loj2091「ZJOI2016」小星星
以前写的题解
8.29
要开学了,真正的鸽子time开始了
太久没学oi了,失恋测失恋了
zroi1492 stone
hint说答案小于等于8,按mod6的余数分类,有两种选择的根号暴力扫一扫
zroi1533 palindrome
考虑把每个点扩展的最长回文串用马拉车求出(二分加hash也可),在树状数组上数一数即可
zroi1534 random
考虑树是随机的,树高是根号级别的,考虑每条链,预处理dp算出连前面每个点的期望贡献次数,大力数一数即可
8.30
zroi529 圣诞树
考虑叶子节点必须连边,最小边数为叶子节点数除二上取整。考虑构造,叶子权值为1,非叶子权值为0,求带权重心,不同子树间连边
zroi530 染色
一定有个点连向其他所有点边的颜色相同,删掉这个点和它连得边后,必然还能找到同样的,把一个点的颜色col定义为颜色相同时的颜色,那么S\'的所有点的col一定相等,随便数一数即可
zroi531 外壳特
考虑把贡献的柿子写出来,发现除了对应的乘积,其他都是常数项,考虑带权最大匹配,KM或费用流解决
zroi543 GoodBye 2018
发现贡献能够分成两段路径的算,考虑树形dp,在lca处合并答案
zroi544 Hello 2019
可以变成mod2意义下的,考虑消去1的条件,跟括号序列,类似的在线段树上维护
晚上开了场cf,打的很自闭,c特判输出写挂,wa了7发,d博弈没来及写完,果然我不太适合cf()
8.31
早上去学校报到,发现班上周围数竞物竟化竞生竞都有
CF1110D Jongmah
以前写过的麻将题,考虑同种顺子不超过三个
CF1110E Magic Stones
差分数组中的元素不会变,判一下即可
CF1110F Nearest Leaf
维护一个点到所有点的距离,建线段树,考虑这个点移动,相当于区间加减
CF1110G Tree-Tac-Toe
考虑对于每个白点,替换成无颜色的一个特殊结构,那么大力判一判即可
CF1401E Divide Square
用欧拉公式转化成求点数边数,扫描线即可
CF1401F Reverse and Swap
就是线段树上打打标记,出题人好像有bitmask做法
CF449A Jzzhu and Chocolate
整除分块
CF449B Jzzhu and Cities
最短路一下即可,记录一下最短路数量
CF449C Jzzhu and Apples
枚举质数,把倍数两两配对,如果奇数个,剩下2*p,这样剩下的也能最大化配对
CF449D Jzzhu and Numbers
fwt+容斥的裸题
晚上复习下去年六校的题
nflsoj446【六校联合训练 CSP #1】流量
求出最大生成森林,这是可以不询问的,注意权值小于0的一定要询问
nflsoj447【六校联合训练 CSP #1】个人练习生
考虑贪心,算出每个人的时间,从大到小,优先叶子。但这显然有反例,考虑一个点的时间是自己的和父亲的最大值,这样保证大的点子孙的优先级也大
nflsoj448【六校联合训练 CSP #1】假摔
考虑(A,B)的取法,发现(A,B)之间元素一定小于等于A和B,否则显然不优。单调栈求出所有(A,B),按A排序,离线下来,倒序操作,每个(A,B)相当于区间加,查询就是普通查询
nflsoj449【六校联合训练 CSP #2】文体两开花
维护所有节点子树里到该节点距离小于等于1/2的点的权值异或和,修改和查询都很大力
nflsoj450【六校联合训练 CSP #2】国际影星
设f[1/2][S]表示从1/2出发,只考虑S内连边,能到达所有点方案数,最后总方案数减去没有交集的方案数
nflsoj451【六校联合训练 CSP #2】零糖麦片
考虑差分序列,变成选两个差为奇质数的点,由哥德巴赫猜想,得出差为奇质数贡献为1,偶数贡献为2,奇合数贡献为3。先二分图最大匹配出奇质数,再分奇偶匹配。或者直接KM/费用流带权匹配,由于不是二分图,要写带花树,好像复杂度不星啊
nflsoj452【六校联合训练 CSP #3】序列
考虑每个位置数为[0,m-1],那么在每个位置都有唯一的方案形成m的倍数,有m-1种方案不成为m的倍数,直接枚举m倍数数量计算
nflsoj453【六校联合训练 CSP #3】图
神题。给所有点随机染上k种颜色,选取所有颜色不相同的点构成答案,此答案可以状压求出,多随机几次,就能行
nflsoj454【六校联合训练 CSP #3】商店
设dp[i][j]表示看到第i个物品,积分大于等于j,金钱小于等于j的最小声望,考虑又f[i-1]中一段连续的区间转移,单调队列优化
9.1
开学了,开启大鸽子模式
CF833A The Meaningless Game
乘起来,开三次根号,判是否整除
CF833B The Bakery
考虑朴素dp,发现每次是前缀转移,考虑向后移带来的贡献,应该是前缀的一段后缀区间加1,线段树维护
CF833D Red-Black Cobweb
拆成两个限制,就可以点分治大力合并
CF832C Strange Radiation
二分答案,向左向右算可行区间并,判断是否有交
CF832D Misha, Grisha and Underground
大力树剖,枚举三种情况,大力求交
CF832E Vasya and Shifts
考虑有四个,又是模五意义下的,相当于不用考虑数量,高斯消元,如果剩下i个方程没有用,那答案就是5^i,无解答案是0
CF830A Office Keys
二分时间,可以二分图最大匹配,但是时间很紧,考虑同JSOI列队一样的做法,贪心即可
CF830B Cards Sorting
操作形成环,断环为链,复制一倍,线段树维护最小值位置
CF830C Bamboo Partition
把取模换成整除,移项,整除分块处理
CF830D Singer House
任何时候都能连到根,所以子树内任意链都可以连到跟,考虑f[i][j]表示i子树内有j条链的方案数,满二叉树,这个i实际表示深度
9.2
白天在学校vpdiv1,我只做到d,pmt快速把ef口胡?
CF827A String Reconstruction
每个点记录下从这开始最长的
CF827B High Load
按%k余数讨论下,随便构造
CF827C DNA Evolution
发现|e|很小,考虑对于每个长度,按取模后余数分类,建立树状数组
CF827D Best Edge Weight
先kruscal找出最小生成树,对其树剖,对于非树边,最大权值为生成树上两点之间最大权值减一,对于树边,最大权值为跨过这条边的非树边最小值减一。维护两个线段树,第一个区间最大值,第二个每个非树边区间取min,区间最小值
CF827E Rusty String
先当带有通配的做,NTT即可,发现是未知字符,对于每个长度,判断它的倍数是否都符合,这是调和级数,复杂度仍然单log
晚上回家随便口胡了些题
CF1156C Match Points
好像去年写过(),结论是,从中间分开,twopointers扫描。不会的话,可以二分,取出前mid和后mid,判断可行性
CF1156D 0-1-Tree
实际记录f[i][0/1]表示i点子树来的链,最后一条边为黑/白,换根dp即可
CF1156E Special Segments of Permutation
先用单调栈,求出每个数成为最大值的最左最右端点,在两边个数少的里枚举,判断是否可行,看起来是\(O(n^2)\),但实际仔细分析,发现是单log
CF1156F Card Bag
考虑一种卡片只有一张的概率,这样可以很方便的算出获胜概率,设f[i][j]表示看了前i张牌,选了j个的概率,暴力是\(O(n^3)\)的,前缀和优化一波变成\(O(n^2)\)
CF1155E Guess the Root
实际,询问11个点,拉格朗日插值一下(自己思考一下,都是模意义下的,所以不会出错),再枚举每个点带入求值即可,不知道为啥询问数多了那么多
CF1154F Shovels Shop
恶心人的题。先考虑显然的贪心,从小到大排序,取k个小的,每次优惠,肯定选连续的一段。考虑暴力dp,我原以为是\(O(n^2)\)的,再看下题,发现\(k \leq 2000\),复杂度实际是\(O(k^2)\)的
CF1154G Minimum Possible LCM
枚举gcd,暴力找倍数,复杂度是调和级数
CF1153F Serval and Bonus Problem
考虑长度为1的,答案就是它乘l,考虑每个位置x的答案,最终结果就是0~1的积分。把每个位置的式子列出来,用NTT优化。注意,这里算出点值不要转回去,所有多项式点值累加起来最后再NTT回去,复杂度为\(O(n^2)\)
9.3
今天whk作业写的好累,在学校都没有vp
CF1153E Serval and Snake
对于一个矩形,如果查询结果是奇数,一定有头尾在里面,考虑对于每行每列查询并二分答案,这样会刚好超限,对于最后一行,实际不用判断它是否有头和尾,那就刚好满足限制
CF1152D Neko and Aki\'s Prank
对于最大匹配,应该是每个奇数层都完全匹配,这样就直接设f[i][j]表示i个左括号,j个右括号的合法方案数
CF1152E Neko and Flashback
考虑在min,max中,两个数各出现一次,给这两个值连边,对于度数不为偶数的,就是序列的开头或结尾,dfs即可,为了降低复杂度,用下当前弧优化
CF1152F Neko Rules the Catniverse
设编号小的为前面,编号大的为后面。由于m很小,考虑记录一个点后连续的m个点是否被用过,这样就保证不重复了,且这个点可以出现在用过的点之间。考虑状压dp,设f[i][j][S]表示所有点都在i以及后方,选了j个,后m个点状态为S。普通状压dp可以过F1,考虑这个dp的转移系数和S无关,把后两维合并,矩阵快速幂优化即可通过F2
CF1151E Number of Components
两种做法,sol1:对于每个数,当它为联通块中最大值时,让他产生贡献,单调栈求出控制区间即可。sol2:联通块数目等于点数-边数,分开来数,点数好算,考虑每条边被算几次
CF1151F Sonya and Informatics
最后序列是0……01……1,设前面有连续c个0,设f[i][j]表示前i次操作,前c个位置有j个0的概率,每次从j-1,j,j+1转移过来。每次操作独立,所以转移的系数相等,矩阵快速幂优化
CF1149B Three Religions
记nxt[pos][ch]表示原串中pos后最近的ch的位置,设f[i][j][k]表示三个串分别匹配到了i,j,k位在原串中的最小位置,暴力dp。考虑加字符操作,实际有一维状态变化量为1,两维状态变化量为O(|S|),所以单次添加复杂度是\(O(|S|^2)\)(这里S指s1s2s3的长度,不超过250)。删除啥都不用管
CF1149C Tree Generator™
考虑在括号序列上表示两点间的距离,实际就是完成匹配后剩下来的括号数量(配对的就表示走入子树又走出子树),所以题目就是要求括号序列的子串配对后剩下的长度最大值。按照套路,左括号权值为1,右括号权值为-1,每个区间的答案,可以变成从中间任意一点断开后面的权值和-前面的权值和最大值(画个图,实际发现那点是树上的lca,那这样正确性显然),线段树维护一堆东西即可
CF1149D Abandoning Roads
把a叫做轻边,b叫做重边。对于有轻边路径的两点,最小生成树上两点间不会有重边。只考虑轻边,原图变成若干个联通块,由前面得出,在符合题意的路径上,不会回到已经路过的联通块。把联通块是否访问压成状态,设f[S][u]表示状态为S,走到u点最短路,只有两种边权,相当于01bfs,但这样无法通过。考虑大小小于等于3的联通块,实际不需要判断,因为最短路的过程就能自动避开反复横跳,所以状态大小除了个4,复杂度为\(O(2^{n/4}m)\)
CF1149E Election Promises
对图拓扑排序,将点分组,每个点的组是后继组的mex,考虑val表示每个组内的异或和,当val初始状态不全为0时,必定能一步变为全0(找到最大第k组的非0,修改,这样[0,k-1]都能被任意修改),val全0时同nim一样,可以模仿(对方对全0操作一定会出现val非0,保证自己操作后val全0,而所有为税变成0时val也是全0),所以先手必胜
CF1148E Earth Wind and Fire
对于优秀的答案,相对位置是不会变的,考虑t[i]-s[i],若前缀和有负,就不能构造出合法答案,不难发现,这个类似于括号序列,那么处理就是跟括号序列一样做单调栈
CF1148F Foo Fighters
每遇到一个一就取相反数,等价于奇数个1取相反数。考虑每个数最高位的位置,从低位到高位贪心,对于当前位置,记录sum在前面的操作下最高位为当前位置的val和(这里的val是被低位操作翻转过的),如果符号相反就不管,如果相同就再此取相反数,并对于每个本位是1的val都永久修改,这样,对于每一位,带来的贡献都和原来符号相反,最终肯定符号相反
9.4
白天想题
CF1147D Palindrome XOR
异或后首位是1,枚举小的数的非零首位位置。考虑构建图论模型,必须相等连边权为0的边,边权不相等连边权为1的边,其他不管。把通过0连接的点缩点,判定森林是否是二分图,如果是,贡献就是2的联通块个数减一次方,注意,一开始已经有确定的一个联通块了
CF1146D Frog Jumping
找规律,发现n大于等于a+b时,答案是\(\frac{n}{gcd(a,b)}+1\),整除分块,小于这个的,写个类似最短路的算法解决
CF1146E Hot is Cold
考虑对值域维护线段树,一开始i位置值为i,每次修改,按到绝对值的关系,发现只有两种操作,区间取反和区间覆盖符号,线段树维护。值域有负的,那就全体加上1e5即可
咕咕咕
晚上小号div3,第一次独自ak,1:29就AK了,全是1A,但是前几题手速不够,最后rak34,上了626pts
A模拟B使较小的尽可能小C枚举公差直接构造D按位贪心E二分出每个区间的范围随便数数F就大力dp
9.5
上午物竞,非常自闭
晚上失恋测
zroi1539 小W与伙伴招募
考虑对每一天贪心,尽量选最小的。维护两颗同构线段树,按价钱建,一颗是模板树,乘天数就是总量,另一颗是记录每种用了多少,这样就能线段树上二分,若左边个数不够,左边打上清空标记,递归右边,否则直接递归左边
zroi1540 小W与制胡串谜题
考虑自定义排序,按照a+b和b+a的大小排
9.6
上午七连测
zroi1535 机器人指令
就是个模拟
zroi1536 逛餐馆
考虑贪心,通过最远的位置cur,分两类考虑,前后分别线段树取min,当点权值变成inf,如果取后面要改cur和前后cur之间的贡献
zroi1547 符文师
实际就是背包,一定存在一种删除顺序,使得任意删掉张数小于等于总数的方案成立。我当时只会断环为链区间dp
下午ct的课
CF1101D GCD Counting
每个数最多7种质因子,对于每个质因子,保留边权是它倍数的边,求森林每棵树的直径,边数不超过7n条
CF1101F Trucks and Cities
考虑dp,设f[i][j][k]表示i到j,分类k段最大一段的最小值。暴力dp会t,考虑从max(f[i][pos][k-1],dis(pos,k))转移时,前面是单增,后面是单减。跟冰火战士,pos显然在交点处最优,这个pos珂以twopointers更新
CF1100E Andrew and Taxi
二分答案,保留边权大于当前mid的边,判断是否有环
CF1099F Cookies
对于以每个点为终点,都进行一次贪心取饼干,树状数组上二分实现。每个点的答案,应该是该点为终点的答案和儿子中非最优的最大值,答案就是根节点的答案
晚上cqh的课
咕咕咕
晚上div2,过了4题,上了440pts,第二天一看,unr了(桌子发出响声)
CF1405A Permutation Forgery 翻转序列即可
CF1405B Array Cancellation 按顺序贪心,每个i是正的,就把\(a_i\)变成0,\(a_{i+1}\)加上\(a_i\),最后统计下负数之和
CF1404A Balanced Bitstring 考虑k个一循环,判下循环节是否可能,0/1确定的个数是否超过k/2。我一开始想了个差分约束(人类迷惑),1是+1,0是-1,限制就相当于区间和为0,即前缀和差为0,拆成两个不等式()
CF1404B Tree Tag 考虑树上一步最远距离是直径,把na,nb与直径比小,如果na*2>=nb或者dis(a,b)<=na,Alice必胜,自己可以在纸上画画图
9.7
白天文化,晚上打膜你赛,是我校以前选手出的(tjw鸽鸽出的,ytq,zyd,ct当时考的)
签到题 大致题意:给序列A,求当i<j且\(A_i>A_j\)时\(A_i xor A_j\)的和,1e5
场上写了个01trie,感觉很裸啊,按位考虑是0的话,前面一样,这位是1的子树有贡献,是1不用管。全场都是bit/sgt,就我一个写trie
拼正⽅体 是Atcoder题,我不知道题号,大体就是给你n个正方形,四角有数,拼正方体,要求角上三个数相等,求方案数,n4e2,数1e3
考虑枚举上下面,通过哈希查找可行数量,就是个纯码力题(虽说场上就我一个没想到思路,枯了)
K错排 AGC005D
考虑容斥。每一次,强制k个点不符合,考虑之和正负k有关,考虑按模k余数分别考虑,直接大力dp,设f[i][j][0/1][0/1]表示看到第i个数,选了j个不合法,第i个数和它加k是否使用过,大力转移
9.8
白天文化课,晚上cf,然而睡过头了
CF1404C Fixed Point Removal
跟zroi前几天那个背包一样,一定存在一种合法操作使得都能删完。那我们发现递推式后,二分找到最多前x个不动,可以主席树上二分,少个log。当然想离线下来树状数组上二分也行
CF1404D Game of Pairs
n为偶数,先手,(i,i+n)配对。n为奇数,后手,每种模n意义下余数取一个,如果模2n不是0,就取补集(详细证明)
CF1404E Bricks
考虑一开始,每个点由单独一个砖块覆盖,每次能删两个砖块间的边界,但砖块不能拐弯。每个边界建一个点,一定不能共存的两个点间连边,求最大独立集,答案就是原来数量减去最大独立集大小。考虑这个图应该是个网格图的子图,所以是二分图,最大独立集转化为最小点覆盖即最大匹配
9.9
没写啥题(调题调不出来)
zroi1548 魔法师
一开始写了个set的大模拟,失败了,写了5k。后来,写了个权值线段树大模拟,写了3k
CF1407C Chocolate Bunny
两个数之间询问(i,j),(j,i)两次,返回值中较大的就是这两个数中较小的,记录最大值位置,按顺序询问最大值和当前节点,更新答案。总次数为n*2-2
CF1407D Discrete Centrifugal Jumps
单调栈预处理转移,暴力dp即可
9.10
白天文化,下午化(数)竞(数)测试,晚上校内oi课()
ybtoj AD1D 种地收益
考虑设f[i]表示考虑完i之前状况的最大收益,f[i]=max(f[i-1],max(f[j]-s[j]+cost(j+1,i))+s[i]),考虑线段树优化,有区间[l,r],在dp到r时给[0,l]的加上贡献即可
ybtoj BD1A 简单游走
直接最短路,转移时考虑下等待的情况
ybtoj BD1B 卡牌选取
按位考虑,有贡献是选奇数个1,枚举该位1的个数,组合数随便算算就出来了
ybtoj BD1C 合影队形
直接连边,有环一定不行,剩下是森林,直接树形dp即可
ybtoj BD1D 公交运输
显然按照每种模数和余数考虑来转移dp,发现有斜率优化,但是这个横坐标不单调,所以要用数据结构转移,肯定会T。仔细思考下,发现最优情况下,v一定是单调增的,那么对于v单调栈的同时,进行斜率优化
zroi87 树状数组
发现对于pos位置修改,产生变化的位置个数是popcount(pos),对于l-1,r的两次修改,被修改两次的个数是popcount(lcp(l-1,r)),考虑dp,f[i][0/1][0/1][j]表示只看二进制前i位,l是否等于r,r是否等于n,lcp中有j个1的方案数
zroi88 雇佣妹抖
套路题。联通块数等于点数减边数,查询大于等于v的点数和边数(此处边权的定义是两边点权的max),先离散化,再树状数组维护即可
zroi89 建造
对于距离之和为S的状况下,组合数很好求出答案,设f[i][j][k]表示考虑了前i个数,有k个空位填更大的数,当前S为j的方案数
zroi490 Standard T1 Problem
f(x)值域很小,暴力枚举即可
zroi491 Tree Problem
考虑树形dp,设f[i][0/1/2]表示子树已经完全断绝/只剩X/只剩Y的最小代价。实际,直接建图跑最小割即可()
zroi492 Permutation Problem
垃圾题(确信),发现k的值很小,考虑状压这连续的2k位。这样显然k较小时过不去,但是发现转移方程系数都一样,可以矩阵快速幂优化
9.11
昨天化竞全校rk21,没有丢oier的脸,白天想了套18年失恋测的题
zroi329 巡逻 从小到大贪心即可
zroi330 矿石
排序后扫描线,每次产生贡献就是没开采过的非空子集个数乘上开采过的子集个数,set实现即可(我一开始不知道为啥在想bitset,大概也能过(确信))(ps:我一开始没看见每种只有一个区间,所以自闭了很久())
zroi331 括号序列
好熟悉的题啊,这不就是蔡老板与公司,哪个出题人这么能搬题啊(恼) 在trie树走,如果下个字符是父亲到当前节点的字符,那就跳回父亲,贡献是父亲访问次数;否则就继续向下。
这场三题代码都小于十行,希望有生之年现场能遇到这种题(吉老师现场不可能这么良心的吧)(ps:我在学校想这些题,在草稿纸上比比划划,被老师当作不务正业,在纸上玩游戏(恼))
晚上vp了一场div1,给我时间(指5h),至少能四题()
CF744A Hongcow Builds A Nation
搜索求出每个所带联通块大小,把没有搜到的全部放到大小最大的,每个联通块连成完全图。正确性显然
CF744B Hongcow\'s Game
交互题。考虑四个格子时,询问左上角,能得到左下角的最优解,询问右下角,能得到左上角最优解。那就2的高次幂向低次幂分治即可
CF744C Hongcow Buys a Deck of Cards
n很小,每次省掉的也很小(重点),考虑状压dp,设f[S][i]表示选了S集合,红色省了i个,蓝色最多省了多少,大力转移即可
CF744D Hongcow Draws a Circle
好熟悉的题啊,这不是和「JSOI2016」炸弹攻击几乎一模一样吗()枚举蓝点,极角排序,二分半径,求出每个对应的区间,twopointers即可
9.12
上午膜你赛,想了想就去vpcf了
ybtoj BD2A 互质数对
我考场上的想法是,对序列中每个数,建出和别的数gcd是否为1的bitset,每个质数建bitset表示每个数是否含此因子,gcd是否为1的或起来取反即可。查询就是查and后的bitcount,也许能卡过去。正解是用莫比乌斯函数表示贡献,发现只需统计μ(x)不为0的x倍数的个数,单次复杂度是2^质因子种数(种数小于等于8)
ybtoj BD2B 树上取模
仔细看一下,发现就是把CF438D The child and sequence搬到树上,树剖后区间取模单点修改区间查询,每次取模数字必定减小一半,线段树上记录下子树是否全为1,暴力修改复杂度就对了
ybtoj BD2C 网格游走
有环一定是全取到0最优,所以tarjan缩下点,算下等效点权,就变成了了dag,答案就是最长路。每次走到0的期望是2i,应该珂以数学归纳法证明,考场上没想到
后来vp了一场远古div1
CF763A Timofey and a tree
一条边两端颜色不同,必选其中一个端点,判定交集是否为空
CF763B Timofey and rectangles
四色定理证明(),本来以为要建图,发现题目有优美性质,边长是奇数,就代表按某点奇偶分配即可
CF763D Timofey and a flat tree
就是大力hash,换根转移,用set和multiset维护hash值
晚上失恋测
zroi1490 cut
一定是Yes(出题人的锅,我不背),考虑每条边由编号小的连向编号大的,这样就是dag,对于每个点,判断父亲中哪种少就选哪种,所以保证大于等于一半。由于从某点开始,所以能保证第一层全选,所以严格大于一半
9.13
上午普转提七连测,好自闭啊
zroi1549 覆盖
根据期望的线性性,考虑每个点选中的概率,相加就是答案
zroi1550 糖果
考虑按照奇数构造,偶数的话先随便选一个。按照a排序,选取最大的,剩下按顺序两两配对,取b大的,b显然满足,最劣情况下,即a每次选较小的,有(a2-a1)+(a4-a3)+……<an,所以a显然满足要求
zroi1551 染色
二分总数,把子树外也转化为子树内,剩下求出每个点的范围,判下根节点是否满足(场上一直在想差分约束,不会子树外的)
下午gutc膜你赛
T1 棉花糖超好吃
早年省队集训题,就是多随机化几次,再每次基础上微调,这样正确率就很高了。上一次见到这种操作是六校
T2 xor
先meet in middle,将前半部分插入trie树,并在节点上更新最大值标记。后半部分在上面查找,若m这一位是0,走向相同01的子树,否则走向不同01的子树,将相同01的子树更新答案
T3 乌帕
对于每种颜色,大力倍增即可
晚上还是gutc膜你赛()
T1 小奇挖矿2
考虑用4和7,能凑出所有大于17的数,那就暴力dp,设f[i]表示选取第i个矿最多矿石数,转移是个相距大于17前缀最大值与小于等于17的暴力枚举
T2 小奇的矩阵
推一下式子,发现答案是路径长度乘上平方的和减去和的平方,发现权值很小,考虑f[i][j][k]表示走到i行j列,和为k,平方的和的最小值,暴力转移
T3 小奇的仓库
发现要异或的很小只有15,那么就是分val%16和val/16分别考虑,大力换根dp,f[i][j]表示以i为根,长度模16为j的个数,g[i]表示所有路径长度除16的和
9.14
晚上gutc膜你赛,1.5h连想带写,不拍直接交,100+100+100->90+20+100
T1跳房子 签到题,算下横竖最多多少
T2 变幻字符
还是签到题,floyd预处理出任意两个字符最短路,对于对应的两个位置,枚举转化到那个字符,取最小值
T3 抢分游戏
仍旧是个签到题() 考虑把状态建成图([a,b]向[a,b-1]和[a+1,b]连边),拓扑一下求出必胜必负,再拓扑一次转移最优权值(upd:正解好像是个dp)
晚上cf,被AB把心态搞没了,就花了1h看了下题
CF1848A Buying Torches 模拟题,样例出错差评
CF1848B Negative Prefixes 从小到大和从大到小比个最优
CF1848C Mortal Kombat Tower
直接线性dp,f[i][0/1]表示打到第i个怪物,0/1打的所需最小代价
CF1848D Trash Problem
垃圾题(bushi) 发现是最大值减最小值再减最大的相邻之差,写个能维护前驱后继的数据结构,splay/set即可
CF1848E Expected Damage
假设有k个大于等于b,如果k<a,答案是0,如果k>=a,每个大于减血概率是\(\frac{k-a}{k}\)(大的数产生贡献就是不在前a个),每个小于减血的概率是\(\frac{k+1-a}{k+1}\)(小于的状况,考虑小的数随机插到大的数中,是插板)
大概后几天主要是补题,vp和六校
9.15
白天看了下ybtoj普及的后两题
ybtoj AD2C 最小差值 求最小差值生成树,\(n \leq 200,m \leq 1000\)
算法1,将边排序,枚举边权最小的边,向后做最小生成树的过程,求出差值,\(O(m^2\log n)\)
算法2,将边排序,枚举边权最小的边,二分差值,暴力加边判断,在mid不成立时继续利用前面的边复杂度级别同算法1
算法3,二分差值,twopointers扫描。想到这里,发现这个差值并没有意义,直接twopointers扫描,用LCT维护,每次加入权值大的(u,v),如果联通,那么就删掉原u到v路径上权值最小的边\(m \log^2 n\)
(看见这题,仔细想想发现加两个0我也会,去问pmt,他直接告诉我这是板板题,我还是题做少了)
ybtoj AD2D 三元组数
对于\(i<j<k\),统计\(a_i<a_j\)且\(a_i<a_k\)和\(a_i<a_j<a_k\),两个相减就是答案。这两个都是写个bit很容易就能解决的问题
晚上vp了一场早年div1,排名出奇的高?
CF741A Arpa\'s loud Owf and Mehrdad\'s evil plan
如果有点不在环上就是-1。否则求出每个环长,再求lcm,如果是二的倍数,要除个2
CF741B Arpa\'s weak amphitheater and Mehrdad\'s valuable Hoses
并查集后,大力背包,但由于有的不能同时选,不能一维数组,所以要用个滚动数组
CF741C Arpa’s overnight party and Mehrdad’s silent entering
连边表示不同,夫妻连边,2i-1与2i连边,一定满足题目要求。发现这个图是二分图,所以一定有解,染色即可
CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths
路径上每个点是哪个字符,二进制权值上哪一位就异或1,算出从根出发到每个点的权值。如果两个点之间路径合法,那么两个异或起来只有0/1位是1。考虑答案是由子树合并来的,运用dsu on tree就能很方便的解决
看了下前几天失恋测时鸽掉的cf
CF1406C Link Cut Centroids
一个重心删完再连同样的;两个重心的话,把一个siz最大的子树的叶子切掉一个,接到另一个重心上;重心在树上最多由一条边相连,所以最多两个重心
CF1406D Three Sequences
考虑b单调不减,c单调不增,答案是\(max(c_1,b_n)\)。进行贪心,设\(c_1\)为x,发现\(b_n=a_1-x+\sum_{i=2}^n max(0,a_i-a_{i-1})\),显然\(c_1=b_n\)时最优,维护相邻差即可
9.16
白天想18失恋测
zroi352 数组计数
设f[i][j]表示选了i个数,和为j的方案数,转移用个前缀和优化
zroi353 旅行
答案是点集间边集大小乘二减去深度,每次暴力向上跳加边,每条边只被加一次,复杂度是正确的
晚上vp了两场cf
CF735C Tennis Championship
f[i]表示i轮最小要多少人,f[i]=f[i-1]+f[i-2]
CF735D Taxes
哥德巴赫猜想,质数是1,偶数是2,能拆成2+质数的奇数为2,其他奇数为3
CF735E Ostap and Tree
设f[i][j]表示i子树中离i最近黑点与i的距离
CF736D Permutations
线代神题。发现i可以填j,相当于矩阵i行j列为1,方案数就是行列式。考虑求出包含所选限制的方案数,实际相当于去掉该行该列的行列式,由于是模2意义下,我们只需求出伴随矩阵就能得出答案,通过矩阵求逆即可
CF739A Alyona and mex
mex最大值一定是最短区间长度,然后每个位置填pos%mex,显然一定满足
CF739B Alyona and a tree
每个点向上倍增,树上差分即可
CF739C Alyona and towers
挺裸的线段树,但是写挂了(咕咕咕) 考虑维护差分序列,区间修改变成了单点修改,题目询问的相当于求最长连续正再连续负的长度,线段树维护一坨东西即可
9.17
晚上校内训练
1.JSOI2008最小生成树计数
所有最小生成树每种权值边的数量都是相同的,可以直接暴力。可以枚举边权,把不是该边权的缩成点,再连上该边权的,矩阵树定理求出该边权的选择方案数
2.BJWC2010严格次小生成树
求出最小生成树,枚举非树变,求出非树边两端点间刚好小于它的点,LCT维护()
3.Sightseeing trip
floyd求最小环
4.Telephone lines
直接大力dp,或二分权值,大于的为1,小于的为0,跑01最短路
5.农场派对
边正的反的分别跑一次最短路
6.最短路计数
求最短路时,顺便转移次数
7.黑暗城堡
求出最短路后,算出每个点转移方案数,乘起来即可
vpcf
CF715A Plus and Square Root 推柿子
CF715B Complete The Graph
每条未知边边权设为1,先最短路一次,若长度短了k,再最短路一次,每次对边权自定的边,改变其权值,使dis尽力加k
9.18
晚上自己vpdiv1,B题2500,自闭了啊()
CF704A Thor
不要看中文翻译,剩下就是队列模拟模拟了
CF704B Ant Man
考虑建图,把贡献摊到边权上,设f[i][j]表示考虑了前i个点,形成了j条链的方案数,大力分讨合并。这题实际有高深的贪心做法?
CF704C Black Widow
考虑每个位置只会有两次,将相关的限制连起来,图应该是只有链和单环的图,每个联通块设f[i][0/1][0/1]表示i号点所有限制异或0/1,当前限制0/1方案数
CF704D Captain America
每一行每一列看做点,若有盾牌,行向列连边,流量为1,源向行连边,流量就是最少到最多,列向汇同理,剩下就是上下界网络流板子
CF704E Iron Man
显然可以树剖,使得问题变成线段上的问题,考虑只会相邻线段先产生交点,用set维护即可
9.19
上午ybtoj膜你赛
ybtoj AD3B 剑的比试
本质是辗转相减求gcd,用辗转相除gcd算次数
ybtoj AD3C LCS问题
考虑到每种数只有五个,所以我们只用记录合法转态及其转移。(x1,y1)转移到(x2,y2)的条件是x1<x2,y1<y2,用数点优化,一维排序,另一维通过树状数组维护前缀最大值
ybtoj AD3D 到达层数
考虑xyz很小,考虑膜x意义下最短路,最后计算下能加上多少个x
ybtoj BD3A 或位运算
按位考虑,先对或为0的操作,显然全必须是0,再看或为1的,是否有位能填1
ybtoj BD3B 字串修改
相邻的相同字符缩起来,判断是否相同,再判下能否个数的问题
ybtoj BD3C 波动序列
设f[i][j][0~3]表示选i,目前第一行/第二行/第三行递增/第三行递减时最长长度,树状数组优化
晚上正睿失恋测,dmy的题果然效果拔群
zroi1564 小好吃说鬼话
设f[i][j]表示s看到i,t看到j的最小编辑距离。考虑大于50不需要计算,所以将状态简化为\(f[i][v \in [-50~50] ]\),表示s看到i,t看到i+v时最小编辑距离(有负的,全局加个50即可。实际场上想到了状态的简化,但还是没写出来,看来我还是菜)
zroi1565 小好吃很呆滞
场上只会提答的30pts。考虑要求前100位,我们只需要考虑前200位,维护前缀最小和最大,设答案在[L,R]。如果每次乘上最小不超过R,直接乘,否则更新前缀最小和最大,直到乘上最小满足
zroi1566 小好吃在摸鱼
倒序贪心,染完一个可以染的节点后,没染过色中它前后两个位置不能染本种颜色
晚上有场cf,质量不太行,所以没打
CF1419B Stairs 合法的只有高为2^k-1的台阶
CF1419C Killjoy 发现答案只有0/1/2,直接分讨
CF1419D Sage\'s Birthday 二分答案k,取最小的k个,和最大的k+1个,看下能不能插在一起
CF1419E Decryption 考虑每两个质因子之间填最小公倍数,剩下的插入其任意两质因子之间
CF1419F Rain of Fire 二分答案,将能互相到达的点连起来,分讨下1/2/3个联通块的情况,大于等于4的一定不行
9.20
下午gutc膜你赛,信心场
T1 电子邮件 按题意模拟即可
T2 游戏 记f[i]表示看到第i个数并强制选时,最长的长度。记g[j]表示当前a[i]是j的倍数f[i]的最大值。每次f[i]暴力枚举约数从g转移,转移完再暴力枚举约数更新g
T3 删边 最短路计数,求出单源最短路后数下前驱数量并乘起来即可
晚上gutc膜你赛(其实爆零,只因忘写文件,300->0)
T1 疯狂生长 按题意模拟即可
T2 两极反转
丧心病狂的二合一() 正向边权为0,反向边权为1。对于图,直接01bfs/最短路。对于树,进行树上差分,拆成(s,lca)与(lca,t)两段去统计
T3 地震
数字最长四位,那么就一定有长小于等于12的循环节。线段树上预处理区间进行011次操作的结果,区间修改打标记,下放标记时相当于011次的这个结果进行转动,暴力维护
9.21
晚上gutc膜你赛
T1 选数
显然S为排序后相邻两数差的最小值。二分S,暴力线性贪心
T2 化学反应
按照B排序,B从小到大考虑,就相当于要找前面与现在a最近的点,维护个set查前驱后继
T3 天际线
将点排序,设f[i][j][k]表示i~j个点,高度大于等于第k大的都处理好的最小矩形数
9.22
补题订正
ybtoj BD2D 漫步校园
考虑把p拆开,发现是选择两条路径,数列相同为某种的概率,设f[k][u][v]表示走了k步,第一条路径走到i,第二条路径走到j的概率,转移和k无关,矩阵快速幂优化即可(场上只知道是矩阵乘法题,但是并不知道如何去整)
zroi1553 aria的礼物
当k小于等于n/2时,数一下有几个不相等。否则发现有长度为n-k的循环节,每个循环节每一位取出现次数最多的字母
zroi1554 神奇位运算
按位考虑,区分出三种操作,每一位一定要两个1,一个0
zroi1555 终焉之数列
考虑变成大于58的数不如变成1,把58以内的16个质因子是否用过进行状压,暴力转移即可,再记录下从哪转移来的
9.23
补题订正
zroi1556 终焉之排列
考虑要寻找的是长度为3的等差数列,枚举中间的数,记录下哪些数出现在该数之前,在该权值打上1的标记,当该数左右开始的01序列有不同时,就找到了等差数列。判断区间01序列是否相等,我们用线段树在线维护
整了场提转普
zroi311 阿
设f[i][j]表示i,j排好序的方案数,从f[i][k]和f[k+1][j]转移来(两个合并排序后只有前面最大和后面最小交换时才能转移)
zroi312 姨
分别算出选了i行,i列的方案数,选至少i个数的概率。最后统计选了i行j列方案数乘上选至少了(i+j)n-ij个数的概率之和。i行j列的概率会被2i*2j次统计到,所以正好就是权值期望
zroi314 铁路
考虑以每个点为最小的去暴力扩展。我们发现,某个点开始扩展的区间内,其他数作为扩展的起点肯定不会更优,连续相同数不会多次统计。容易证明,每个位置最多被更新log次(一个数列,前面要是后面所有数的倍数,不同种类数字个数是\(\log a\)),所以这样就保证了复杂度严格小于\(O(n\log a)\)
nflsoj703【2020五校联考NOIP #5】I\'m
考虑鸡受到伤害小于等于猫的伤害的概率,我们枚举猫受到的伤害(这个远小于鸡受到的伤害上限),乘上鸡受到伤害的一个前缀和即可。最后答案就是用1减去前面结果
9.24
晚上校内oi训练,数竞教练来教数论()
nflsoj704 【2020五校联考NOIP #5】DDL
同国王饮水记一样,每个区间的最优取的顺序是从小到大取。所以每个数的贡献与大于它的数的数量有关,用线段树维护这个东西,dyls的详细题解
晚上cf,技不如人甘拜下风
CF1420A Cubes Sorting
找一下有没有\(a_{i-1} \leq a_i\)
CF1420B Rock and Lever
每个数记录二进制下最高位,最高位相同的产生贡献
CF1420C Pokémon Army
考虑直接ddp,用线段树维护区间开头为正负结尾为正负的最大价值,swap就是两次大力单点修改(正解好像是贪心)
CF1420D Rescue Nibel!
将时间点插入multiset,加入一个新种类时,算出在已有的所有种类中选k-1个的方案数,累加后即可,显然每一组只会被最后出现的记录,正确性显然
9.25
晚上校内数竞课,所有题都只会构造,不会证明(除了一个用动态(数学)规划(归纳)证了一下)
CF1420E Battle Lemmings
考虑最小化不产生贡献的0的对数。设f[i][s][t][c]表示看到第i个,用了s次交换,当前连续0的长度为t,用了c个1的最小不产生贡献0的对数。第一维可以滚掉,听说还有斜率优化
nflsoj706 【2020五校联考NOIP #6】俄罗斯方块
考虑两格为一单位,暴力矩阵乘法
9.26
写ybtoj的模拟赛
ybtoj AD4A 数列翻转
暴力模拟
ybtoj AD4B 行走方案
考虑每步可以向上或向左/右,由向上转向左/右时状态数乘二,矩阵乘法暴力转移
ybtoj AD4C 子串匹配
考虑kmp,如果和上个同种字符距离相等,就可以扩展,或者第一次出现且border长度小于等于一半,可以扩展
ybtoj AD4D 树上距离
考虑树上倍增,记录fa[x][i]表示2i次祖先,p[x][i]表示2i-1次祖先。设f[x][i]表示考虑向上到lca距离小于等于2^i的贡献之和,转移考虑分最高位和非最高位,f[x][i]=f[x][i-1]+f[fa[x][i-1]][i-1]+siz[p[x][i]]-siz[p[x][i-1]],转移时记得判父亲存不存在之类的问题
ybtoj BD4A 古老谜题
考虑拥有奇数个1的子区间,一定是合法的(只有一个1时不能在两边)。考虑记录奇偶性的后缀和,枚举起点,查出它后继的1位置为p,答案就是p+1位置的后缀和。每遇到一个1,奇偶性翻转一下
ybtoj BD4B 预算缩减
考虑f[x][i]表示x所在联通块,当前大小为i。暴力转移即可,暴力合并即可,看起来是\(n^3\)的,但实际每个点对只会在lca处合并,所以复杂度是\(n^2\)的(我当时还在想fft优化)
ybtoj BD4C 模拟比赛
考虑算出每个人的最高最低分数,枚举每个人作为前s人最后一名,考虑最小大于等于其最大的一定在前s,枚举一定在前s的中间选了k个,暴力组合算下方案即可
ybtoj BD4D 筹备计划
先不考虑34操作。根据小学数学,显然最优位置是带权中位数,那么我们需要一个线段树二分。如何计算贡献?考虑吧绝对值拆开,用树状数组维护在位置前后的人个数和与坐标和。考虑34操作,选择位置具有单调性,所以我们需要找到中位数左右两边最近可选位置,再比较哪个答案较小。考虑维护一棵线段树,支持区间赋值,线段树二分(思路很simple,下面开始码力表演,反正我写了6k)
9.27
晚上gutc膜你赛
P2885 Telephone Wire
考虑f[i][j]表示看到第i个,高度为j的最小代价,绝对值拆开前/后缀转移
P2886 Cow Relays
离散化,直接矩乘即可
P2887 Sunscreen
考虑原点连向牛,流量为1,牛连向防晒霜流量为1,防晒霜连向汇点,流量为数量,跑最大流即可
晚上深夜cf,小号rating低,只能div2
CF1417A Copy-paste
用最小的数给其他所有数加即可
CF1417B Two Arrays
1与T-1,2与T-2,……这些不能放一起,当n为偶数时,n/2尽量均摊的放
CF1417C k-Amazing Numbers
对每种数字考虑最小的k值即可
CF1417D Make Them Equal
场上构造WA了,咕咕咕
CF1417E XOR Inverse
考虑贡献只会由第一位不同的产生,建个trie,每次更新左右儿子异或/不异或构成的逆序对贡献,贪心的取即可
9.28
下午班会课请了个假,看了下div3题目
CF1426E Rock, Paper, Scissors
最小的话跑最小费用最大流,最大直接贪(最小我不会贪)
CF1426F Number of Subsequences
枚举b/?的位置,讨论前面选a/?,后面选c/?,暴力求和即可
晚上gutc膜你赛,是以前常高NOI膜你赛
T1 朗诵
每个数放入数值减去下标的桶中
T2 保护数列
考虑and的特殊性质,1的个数具有单调性,所以我们枚举右端点时,左端点分成log个区间,在可持久化01trie上查答案
CF1417F Number of Subsequences
考虑倒序并查集,定一个dfs序,一定能使每个查询是一个连续区间,因为倒序并查集合并时,不影响在原操作序列中后面查询联通块的标号连续性。那么就变成了线段树区间最大值的问题了(场上没来及看题)
9.29
Oier的国庆开始了(运动会就咕咕咕)
上午随便口胡口胡题
nflsoj473 【六校联合训练 CSP #10】数学题
考虑裸的dp,按\(p^a q^b\)排序,设f[i][x][y]表示第i次考虑,乘积为\(p^x q^y\)。转移过程同背包一样,所以与顺序没有关系。预处理到k=23,每次暴力查询即可
nflsoj474 【六校联合训练 CSP #10】城市
对每个二进制位单独连边,对于点x,连向\(a_i\)二进制为1的位的虚拟点,边权为指数。跑最短路,答案除二即可
nflsoj475 【六校联合训练 CSP #10】好 ♂ 朋 ♂ 友
同昨晚保护数列,这题利用or的特殊性质,0的个数具有单调性。将询问离线,倒序扫描钦定左端点,暴力扫右端点值不同的log个区间。线段树/树状数组维护区间加,区间查询
这套题实际去年csp前几天写过,但是昨晚一开始根本没有想到and和or的单调性,我还是太菜了
后来随便开了场cf,又自闭了
CF700A As Fast As Possible
自己画画图,解解方程
CF700B Connecting Universities
贪心。考虑每条边贡献分开算,贡献为两端有标记点的较小值
CF700C Break Up
先tarjin一遍,判是否有割边。如果没有,暴力枚举一条边断掉,再跑tarjan找割边
感谢dyls提供的优致膜你题,又能让我写好几天了
下午开D1,自己会100+35+60
T1 序列
将奇/偶数填入奇/偶的位置,先分类讨论。考虑如何填最优,同JSOI2018列队,显然填完之后,相对顺序不变时,绝对值差最小。考虑如何最小化字典序,将原位置对应到新位置的关系抽象成有向线段到1~n的数轴上,两个对应的新位置能交换,当且仅当原来方向相同且有交集。线段按照方向分为三类,负,点,正。对于负,区间权值从大到小排序,尽量向后插入,用set维护。同理正,从小到大排序,尽量向前插入
T2 灯泡
还是那个老套路,联通块数=点数-边数。点数很好算,边数考虑根号分治。若一种数出现次数小于等于S,暴力修改该数左右两边的连通性;若出现次数大于S,预处理任意大于S数字之间的边数,大于S数字间的直接查表,小于等于S的在添加小于等于S的数时打上标记。这样就可以在\(O(n \sqrt n )\)时间解决问题
T3 比赛
场上只想了个n^2的dp,f[i][j]表示前i个人,选了j个成为胜者的概率。剩下就是我想不到的离谱做法,考虑f[i][j]可以从头和尾添加,一共有两种正确的转移方式。联立后,发现形成了f[n][k-1]->f[n][k]的递推式,那么暴力推。当p=1/2时,是个特例,用人类智慧玩一下就能得出答案
自闭后开了D2,自己会50+60+60,没签到
T1 石子
期望时间是之前期望删掉堆数加一。根据期望线性性,每堆单独考虑,贡献为\(\frac{a_i}{a_1+a_i}\)
T2 内存
我场上思考的是暴力枚举x,每次二分答案求解。考虑优化,随机化没用过的x,当前二分上限是之前的答案,若之前答案不满足,则不用二分。随机选x,更新答案概率为\(\frac{1}{i}\),i表示是i次随机。那么期望二分答案次数是调和级数,即\(\ln m\)。总复杂度是\(O(nm+n \log n \ln m)\)
T3 子集
部分分考虑f[i]表示lcm为i,gcd为1的方案数,\(f[i]=(\sum_{d=1}^i [d|i])^n-\sum_{d=1}^i f[d][d|i]\)。好像和正解没啥关系?正解考虑,对于每个质因子,必须出现0次幂和最大次幂,这样分4种情况容斥。这样不能通过,考虑没有0次幂和没有最大次幂的方案数是一样的,只需分3种情况,即可通过。分解质因数用pollard\'s Rho或者奇技淫巧。
9.30
开了D4,自己会25+100+80~100
T1 路径
神仙构造,蒟蒻只会爆搜。“对于深度为奇数的节点,我们先输出它,再遍历它的整个子树;对于深度为偶数的节点,我们先遍历它的整个子树,再输出它。”
T2 魔法
考虑先利用kmp/ac自动机求出t在s中出现的区间为[l,r]。设f[i]表示强制选i且r<i的区间都满足时的最小代价,\(f[i]=\sum_{j=maxl}^{i-1}\),maxl表示r<i时l的最大值,线段树优化dp
T3 交集
暴力思路是求出每个点x,在选取一个点作为父亲时,子树中选了k个点,且k个点两两lca都是x的方案数,显然每个儿子只能选1个,剩下的全是x上的。预处理每条边的状态,复杂度最多为\(O(nL^2)\),我不太会算真正的复杂度。从生成函数的方面去考虑,选个点作为父亲,实际就是没有父亲时的生成函数除掉一个一次多项式,所以预处理所有点都作为儿子的\(O(nL)\),查询时保留多项式除法\(O(qL)\),即可通过此题
后来随便写了点CF题
CF1327F AND Segments
按位考虑,对于and为0时,区间该位至少有一个0,and为1,区间全是1,运用上文魔法一样的思路,设计dp,f[i]表示强制选i位为0的方案数,前缀和优化即可
CF1327G Letters and Question Marks
对于T建AC自动机。如果S没有?,就直接在自动机上跑即可。设f[i][j][msk]表示看到第i个字符,在自动机上j号节点,?处选用了字符的状态为msk。这个dp显然会超时,考虑?个数很小,中间很多转移都是重复工作。考虑预处理,记录从自动机上i号节点开始走S中一段极长的不包含?的序列的终点和贡献和。这样第一维简化成i个?后,直接写会MLE,把第一维滚动掉即可。这题写的时候要注意常数和剪枝
CF1158C Permutation recovery
考虑每个限制,可以拆成nxt大于i且i大于[i+1,nxt-1]中间的所有数,大的向小的连边,拓扑排序就能求出答案。直接连边边数太多,考虑是向区间连边,线段树优化建图即可
校内oi训练,看了套六校noi
nflsoj654 【六校联合训练 NOI #5】划分
和前几天那个cf思路一样,两个格子间的没染过色的边建点,相邻且夹角为π/2的之间连边,表示不能同时存在。显然是二分图,要求最小点覆盖=点数-最大匹配
nflsoj655 【六校联合训练 NOI #5】排列
没n+1个人分成一段,维护每段最大值与次大值,找到次大值最大的点并选取,对于其他位置,若最大值大于选取点的次大值,就将最大值删去,重新选取该点最大值与次大值,每次操作每一段之多减少1个数,所以显然有解,用数据结构维护刚才所说的过程即可。
nflsoj656 【六校联合训练 NOI #5】超立方体
分三类考虑
1.p为0,q为1,记为x个
\(O(2^x)\)暴力枚举
2.p为1,q为1,记为y个
\(f(x,y)\)表示\(p=x,q=y\)的答案,不妨设a为\(lowbit(p)\),\(f(x,y)=f(x-a,y)-f(x-a,y-a)\),预处理高维前缀和,复杂度为\(O(2^y)\)
3.p为0,q为0,记为z个
不妨设a为\(lowbit(q^((1<<31)-1))\),\(f(x,y)=f(x,y+a)-f(x+a,y+a)\),预处理高维后缀和,复杂度为\(O(2^z)\)
每次三种选取最小的,单次复杂度最大为\(O(2^{\frac{n}{3}})\)
晚上CF,果然是智商场,靠py苟活(也许是降智严重)
CF1408A Circle Coloring 直接模拟,显然有合法答案
CF1408B Arrays Sum 考虑一个b,能带来k-1个变化。算下a中变化次数,除一下,上取整,k=1特判
CF1408C Discrete Acceleration 算出到达每个点的时间,找到相交区间,数学推下柿子即可
CF1408D Searchlights 计算出每个人向上跑x格时,至少向右跑距离的最大值,最后暴力扫描比最大
CF1408E Avoid Rainbow Cycles m个集合建点,n个点也建出,集合向点连边,显然答案没有环,那就找个最大生成树即可
CF1408F Two Different 考虑2^k的做法,显然可以分治下去解决,最后只剩一个值。对于n,可以像st表一样,对\([1,2^k]\)和\([n-2^k+1,n]\)进行分治
10.1
上午正睿十一集训,讲了单调栈队列堆并查集之类的ds。发现假摔是JOIOPEN2019的原题。原来kruscal重构树也可以在并查集上用,或者说本来就是并查集的科技,只是在kruscal时也需要并查集()
CF1063B Labyrinth
记向左次数为a,向右次数为B,考虑向左右为1,向上下为0的图,01bfs,可以算出到达每点a+b最小值,我们根据点的坐标知道a-b,算出ab并判断即可
下午讲了些线段树
P4198 楼房重建
考虑两区间如何合并,在线段树右子树中二分断点
例3:有一个序列列 a[1…n],每个 a[i] 是 (c,x,y) ,表示颜色和坐标。要求支持单点修改以及区间询问:颜色不同的曼哈顿距离最大的一对点的距离。
考虑一个常规的想法,把绝对值拆开,分成四种求最大值。推下柿子发现要的是关于\(x_i,y_i\)的多项式的最大值最小值。由于要求颜色不同,维护颜色不同的次大值次小值
看了场六校NOI
nflsoj642 【六校联合训练 NOI #1】fct
考虑Lucas定理拆分组合数,每次拆成6个长度除3的子问题处理
nflsoj644 【六校联合训练 NOI #1】nim
要求两两不同异或不为0的方案数,考虑总方案数减去不合法方案数。f[i]表示i个数异或为0方案数,\(f[m+1]=\prod_{i=1}^{m+1}{2^n-i}-f[m]-f[m-1]*(2^n-m)*m\),总方案数减去前m个为0的再减去有相等的数(m-1个异或为0)的方案数
看dyls博客学了下sam,补了下nfls十一集训的题
nflsoj716 【2020南外国庆集训 #1】神秘代码
考虑一个容斥,所有两两不同lcp的贡献-正串反串同时出现的贡献+同一个串同一位置的贡献,第一个是所有正反串一起建sam,后面是每个串单独建sam,很耗空间,记得重复利用
10.2
上午去nfls校内训练,被van泽远鸽鸽的提高组模拟赛打爆了
T1 礼物
从前到后枚举题目,用并查集维护所有t的答案。假设当前值域为[0,k],如果\(w_i>=\frac{k}{2}\),后面加1并合并并查集;如果\(w_i<\frac{k}{2}\),前面减一,全局加1。总复杂度为\(O(t\alpha(t))\)
T2 简单题
对于n=200,可以矩阵快速幂。对于n=2000,推出GF为\(\frac{1}{\prod_{i=1}^n(1-w_i)}\),然后后面就是我不会的多项式做法了(悲)
T3 退役
考虑如何挖掉某点到根的路径,用先序遍历和后序遍历合并即可。考虑挖掉x到y的路径,应该是一个前缀一个后缀两个区间(有的前缀后缀被另一个路径切断退化为区间)和lca到根的并,暴力线性基合并。如何提取区间的线性基,可以记录时间戳,找到最近的访问,就珂以单log求出。
下午听正睿时看了下gutc那边的题目
T1 卵石
奇数堆必胜,偶数堆除了两两相等的配对必败,其他必胜
T2 村庄
原题黑暗前的幻想乡。暴力枚举每个公司是否参与来容斥,矩阵树定理计算当前选择生成树方案数
T3 翻转
妙题。以四个小正方形为单位,计算黑色个数,若是奇数,这四个点中间那个就不可能在答案矩形里,称之为坏点。剩下就是找最大矩形,不包含坏点,枚举下边界单调栈即可
10.3
上午五校联考,样例出锅差评(我不会告诉你我一直不知道某个样例是错的,调了4h(确信))
nflsoj720 【2020五校联考NOIP #9】樱初音的考试
考虑限制的点集是有包含关系的,建出重构树,在上面dp,设f[i][0/1/2]表示i子树全为0/1/有0有1的最大价值
nflsoj721 【2020五校联考NOIP #9】勇士
考虑最小割。每个点拆点,一个用于连行(连源点),一个用于连列(连汇点),相交行列之间连上正无穷。每个勇士,取出他⾏⾛的路径上最⼤且不⼤于他本⾝战⽃⼒的点,并设这个点的⾦币数为mx。从起点按照格点依次连边,边权是mx-当前点的值。mx之和减去最小割即可
nflsoj722 【2020五校联考NOIP #9】棋局
对于每个k,线段树上二分即可(实际我的想法是整体二分,显然也是单log)
van泽远鸽鸽在zroi的模拟赛
zroi1584 [十一集训A班day1]奖杯
和昨天nfls校内集训T1做法一样,启发式分裂。考虑一个贪心,删去出现次数小于\(f_n\)的数,剩下变成多段,递归求解。暴力是\(O(n^2)\)的,每次对分成两段中较短的直接处理参数,推出较长所要求的参数
zroi1585 [十一集训A班day1]项链
正解断环为链,对这些字符串排序,答案一定是第K小的前缀。随机前缀最后的位置,暴力dp即可。为啥写的这么简略,显然是我不太懂,我只会暴力sa,rak1~k选上就行(正确性好像也没有证明)
下午gutc模拟赛
P4081 [USACO17DEC]Standing Out from the Herd P
实际和sa求本质不同子串差不多,由于不能在其他串出现,所以有可能有些串被减了两次,记得加回来
P4082 [USACO17DEC]Push a Box P
考虑转角,箱子不能动,人要动,相当于有两条路径,求变双即可,大力搜索
P4090 [USACO17DEC]Greedy Gift Takers P
考虑一定是一段后缀不能行,二分能行的个数,贪心check
10.4
zroi集训,今天讲的干货还是挺多的
1.1 至少添加多少条边,可以使得图中不存在桥
和zroi圣诞树那题一样,至少是叶子数除二上取整,这里不需要构造
1.2 给定N个点的无向图,Q次询问,每次给出(a,b,c),询问是否存在两条分别从a和b到c的边不相交的道路
在同一个变双或者dis(a,c)+dis(b,c)=dis(a,b)。若询问的是点不相交,一定在同一点双或在圆方树上(a,c)和(b,c)没有交集
1.3 给出一张无向图,求一个最大的子图,使得每个点的度数都不小于