2019.9.1
BZOJ3238: [Ahoi2013]差异
后缀自动机好题
好像想到这个结论就不难,但是不太好想QAQ
把串倒过来建,则两个前缀的最大公共后缀就是pre树上的lca的step
因为一个点的pre代表的肯定也是这个点代表的后缀,记住就行了
P.S刚看了一眼SA+单调栈的写法,挺思维的啊,想不出来,还有那个单调栈一端设可以等于,一端设不可以的要注意一下很有启发性
2019.9.2
BZOJ3277: 串
好难的题啊,明天还要在回顾一下
广义sam+set启发式合并,注意,本质相同的串出现多次算多次QAQ
貌似广义sam不能拓扑序,必须要连边+dfs
2019.9.3
BZOJ1510: [POI2006]Kra-The Disks
POI的思维题……真好……
前缀最小值,没想到
2019.9.5
BZOJ1528: [POI2005]sam-Toy Cars
显然堆维护nxt,每次出nxt最大的
BZOJ1124: [POI2008]枪战Maf
思路不难,但是代码不太好写QAQ可能是因为我代码能力比较差,最近在多练练QAQ
对于如果环上有一个点被删除的时候直接就用第一个循环删掉了
否则的话才会用第二个循环删
BZOJ3522: [Poi2014]Hotel
显然会有一个中心点
一开始想的是点分治+容斥然后组合数一下
没注意到n到5000,n^2稳啊……枚举中心点,然后搜,统计深度出现的次数,一乘就行了
2019.9.7
BZOJ2277: [Poi2011]Strongbox
好神的题鸭QAQ
不过这种题貌似的套路就是先找出一些隐藏的性质
然后就能推了
要多练习才行QAQ
BZOJ1531: [POI2005]Bank notes
单调队列优化多重背包,学会了模板bingo
队列的大小要根据V,煞笔的调了半天QAQ
BZOJ2216: [Poi2011]Lightning Conductor
挺好的题,首先说一句,我没看出来是dp,这有很大的问题
我们只考虑比一个点小的位置,然后倒过来在做一遍就行了
然后要记住:根号函数越大增长越慢,所以是满足决策单调性的
orz
BZOJ2946: [Poi2000]公共串
对于第一个串建后缀自动机,然后后面的直接在上面跑
并对于每一个节点记录当前串能走到这个节点的最长子串和所有串能走到这个节点的最长串的最短
最后对于最短去个max即可
BZOJ2213: [Poi2011]Difference
真tm的好题!!!没算法,就是不好想。乱搞技术不行啊唉
枚举右端点并假设右端点的值时前面一段区间出现次数最大/小值
2019.9.8
BZOJ2144: 跳跳棋
好难的,关键不好想啊
套路:这种题首先还是要想性质,可以发现中间点可以向两边跳,而两边只有一个点能向中间跳
就像一个树形结构
然后就会想到两个状态的lca
attention:平方的期望不等于期望的平方!!!(Osu)
2019.9.9
BZOJ1756: Vijos1083 小白逛公园
显然线段树题,一开始有一个地方没有注意,看了博客才发现
就是必须要用结构体,query的类型也必须是
因为需要把两个子树合并qwq
BZOJ2458: [BeiJing2011]最小三角形
就像分治求最近点对,只不过多了一重循环而已
BZOJ5091: [Lydsy1711月赛]摘苹果
概率期望好题,看着好难的样子,这种题就是要写下来推一推吧
可以发现所有点被采摘的概率和被第一次选中的概率是一样的,然后就出来了
2019.9.10
BZOJ4403: 序列统计
又想不出来QAQ
对于求一个不下降的序列,我们可以把第i个位置加上i,这样就转换为求严格上升的
值域范围是[l+1,r+len]然后组合数选一下C(len+r-l,len)=C(len+r-l,r-l)
显然不能都扫一遍
然后我们可以考虑C(n,m)=C(n-1,m-1)+C(n-1,m)的递推公式,然后把最后的求和变形一下即可,然后直接上Lucas
BZOJ3143: [Hnoi2013]游走
这种树上概率/期望dp,往往是设经过一个点的概率是多少,显然能列出来,然后高斯消元即可
经过一条边的概率就是两个端点各自的概率/各自的度数,按经过边的概率贪心分配即可
BZOJ3270: 博物馆
套路同上一道题,把一个人在a,一个人在b看成一个状态(a,b)然后可以列n2个方程,最后n6的高斯消元
2019.9.11
BZOJ2286: [Sdoi2011]消耗战
本来YY了一个自底向下的堆的做法,然后被告知是虚树裸题,学习了QAQ
2019.9.12
BZOJ4472: [Jsoi2015]salesman
鸡冻啊,终于YY出来一道树形dp的正解了QAQ
我太菜了啊
2019.9.14
BZOJ4543: [POI2014]Hotel加强版
好题啊,首先枚举中点肯定不行了,然后我们还是用常规的这类题的思路,不同的链在链顶合并,然后发现每次转移只跟深度那一维有关
就可以用长链剖分
每个点直接继承长儿子的移个位就行了,可以用指针
BZOJ4675: 点对游戏
没想出来的好题
就是说一个人最后选出的点的个数是确定的,假设为tot
那么共有点对(tot-1)tot个有序点对,
而抽中幸运点对的概率就是sum/(n(n-1)),sum即为幸运点对个数,可以用点分治求得
往往这种都是设f,g表示到根长度为i的点有多少个,g向f合并
BZOJ1924: [Sdoi2010]所驼门王的宝藏
显然是tarjan+最长路
但是建图的时候比想象的要暴力
对于行就是找一个可以横穿的格子,然后向本行其他格子连有向边,如果另一个格子也是可以横穿的,在连一条回来
然后列是类似的,八连通的就直接用map硬搞
看似O(n),实际则是O(k)对吧
2019.9.16
BZOJ3257: 树的难题
好题啊,树形dp可以看出来,然后就是想不出来状态QAQ
f[x][0/1][0/1/2]表示x子树内和x划分到一块的黑点数为0或多个,白点数为0,1或多个,而且子树内不和x分在一起的都划分完成的最小代价
我们可以在弄一个h数组,先把f对应的更新到h里再倒回来,就不用担心覆盖没有更新的状态了
枚举当前点和儿子的状态,然后分断边和不断边讨论即可
好难啊qwq!
感觉这种一眼树形dp题是不是都要围绕当前子树内和根相关的设计状态鸭QAQ
2019.9.17
CF1209C
枚举一个临界,小于它的只能染1,大于它的必须染2,等于它的讨论一下
感觉这种构造题我好菜啊
2019.9.21
最近在补了补一些CF的题
CF1215D
博弈题,不会啊。果然是薄弱点啊
如果两边的问号数一样且和一样显然先手GG
问号数不一样的时候{
显然先手出一个后手会在另一边出一个一样的抵消作用
所以我们看问号多的那一边就行了
然后讨论一下就行了(实际是懒得写了/逃)
}
CF1215E
状压dp,同不会,感觉天天文化课智商越来越低了艹
f[S]表示处理了S这些颜色
然后g[j][k]表示只考虑j,k两种颜色提出来,j全部在k之前需要的步数
枚举S中放在第一位的转移一下即可
2019.9.22 CF1220D 2019.9.24 CF1230F 2019.9.27 CF1220E 2019.9.28
CF1215F
这个拆点2sat有点骚啊,就是除了选或不选,还有功率>=f还是
有点东西啊
首先如果留的都是奇数肯定没问题,相连的两个点奇偶性不同,肯定是二分图
如果给这些奇数全部乘上一个2^k也可以,只是后k-1位相同,然后前面的奇偶性
然后就能过
CF1230E
考的时候怎么煞笔了啊,明显从根到这个点的gcd个数最多log()个啊,每个点开map,然后暴力dfs就行了啊
扎心啊
势能分析是真的牛逼啊
然后就是暴力了……
CF1209F
拆边然后类似bfs,技巧就是巧用vector吧
英语不行啊,in a row是连续的意思的意思……
所以一条边可以走多次,就是不能连续走
所以一个边双连通分量的所有点都可以取
先缩个点,然后树形dp
f[x],g[x]分别是可以回到和不回到(可能可以但就是不回去)x父亲的最大价值
BZOJ5462: [APIO2018]新家
好难啊qwq
首先如果二分的话可以转换为区间数颜色个数问题
然后线段树二分的话可以变成一个log的,好神奇啊!
线段树最底层的节点每个维护一个堆,维护当前位置放得颜色的pre值
每个颜色再开一个multiset,查前驱后继用