摘要:
这题要看出dp更新的方法,因为我们有很多字符串,而最后的串可以随意组装而来 因此dp状态设计为f[i]到i的最小代价,这也一直往下跳,更新的时候更新fail链上的所有答案,因为这些是可以成为他的后缀更新过来的,这也就枚举到了所有的情况 #include<bits/stdc++.h> using na 阅读全文
摘要:
首先猜想一个事情,这题求树,其实是使得最多的点在一个集合,并不用考虑环的问题,在不考虑二元环的情况下,本题没有环 举三个数的例子,如果a^b<a^c,那么ab连边,如果b^c<a^c,bc连边,那么ca不能连边,因为不等式已经约束了 因此就要考虑如何成为连通块。对于异或的题目,很多都和字典树在一起, 阅读全文
摘要:
这是基于时间的离线线段树分治法,时间分治是一种经典套路,一般来说,离线算法比在线算法容易实现。 因此在本题,我们用双端队列维护信息,弹出来的时候,在时间线段树上区间修改,表示他在哪段时间可见,这样我们查询的时候,在所需要查询的时间,那里就是合法的信息 #include<bits/stdc++.h> 阅读全文
摘要:
根据题意x^2x=3x 异或和普通加法的关系其实就是异或是不进位加法,我们把3x看作x+2x 这样其实求的就是异或中x和2x每一位异或都是0的答案,也就是x中没有相邻1,因为2x就是x左移而来 对于第二问,一看数据范围就知道是个数学规律题,因为普通做法不可做,观察可得,这是斐波那契数列的n+2项,因 阅读全文
摘要:
这题的题意告诉你,每次询问不超过10,说明我们只需要维护前10个即可,这样的话维护的大小就不多 因此可以直接树链剖分+线段树来做,但是还有个问题,不能直接套一个含log的数据结构进去,因为这样复杂度会多一个log,我之前用的set超时了 因此还是使用使用vector直接归并数组来做 #include 阅读全文