摘要:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int inf=0x3f3f3f3f; const int N=2e5+10; string s; int main(){ ios::sync_with_ 阅读全文
摘要:
虽然看上去需要维护两个传送门,但是其实dp状态只需要设计一个就行了,这是因为当我们使用传送门的时候,总是在当前点创建传送门,所以只 也就是只要维护另一个传送门即可 对于转移,我们首先要把任务拆分掉,因为虽然一个任务有两个位置,但是我们发现其实每一步可以看成一个任务,因为假如我在上一个任务的终点 对于 阅读全文
摘要:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int inf=0x3f3f3f3f; const int N=2e5+10; int a[N]; struct node{ int cnt; node 阅读全文
摘要:
首先本题是求取完全图的最小生成树,但是显然暴力不了 我们观察到任意两点之间的权值就是两个点到根节点的异或和 因此想到用Trie来维护这个操作(反正我想不到)也就是xor最小生成树 我们把每个点到根节点的异或和当做点权值,建立01Trie 这么做是为了下一步做贪心的准备,因为最小生成树其实就是用一些边 阅读全文
摘要:
本质上是一个状态机模型,因为对于每个来说,只有可能存在一个篮子是由同一堆中的不同颜色构成,否则都可以转化为这一类。 因此我们枚举f[i][j]为前i个,红色果实剩余j个,之后选择是否选择产生这种的篮子进行dp转化 #include<bits/stdc++.h> using namespace std 阅读全文
摘要:
题目满足单调性,考虑先二分后进行check 对于check,用树形dp来表示状态是否可达,设计d[i][j]表示以j为根节点的子树,使用了i个a边,能满足长度不超过二分答案值的离i最远距离的最小值 含义就是,对于每种合法方案,都保存最小的距离,这样对之后的状态转移的最优的。 #include<bit 阅读全文
摘要:
本题没有无解情况,因为这题本质上可以通过二进制叠加,并且我们知道所有数都能被这样表示 对于有解情况,显然每次跳跃的越多越好,但是这是有限制的,一个分裂的总数不能超过当前的个数 第二个是当前分裂完后,要保证第二天分裂结果不能超过总答案,否则无法到达。 #include<bits/stdc++.h> u 阅读全文
摘要:
本题询问字符串的编辑距离。 观察题目可得,插入操作是没有用的,所有插入操作都能用删除操作,并且至少不会大于。 因此我们发现,对于两个字符串使得他们相等,最小的其实就是保留lcs。 现在询问的数量很多,因此肯定考虑预处理,对于s串l-r,如果能匹配t串,那么我们需要找的是两个串最大能满足条件的lcs。 阅读全文
摘要:
题目想问的是每次取一个所能取到最大的连通块,并把他们的上面每个点的权值-1,最少需要多少次操作 这题顺着做,就是每次找到最大的连通块,然后-1,之后可能出现某些连接点权值为0断开,变成多个连通块继续做。 因此考虑倒着做,我们发现,每个点作为单独的连通块做出的贡献就是当旁边的点权值为0了,因此将点的权 阅读全文
摘要:
观察题目可得,所有初始位置比其他小,并且加速度也比其他小的点是永远不会成为答案的,这些点应该要删除,否则对后面求解有影响,之后会说明。 对于p相同的,只需保留a最大的即可,因为其他也不可能成为答案。如果最大的有多个,那么这个点不能成为答案,因此要把他的贡献置为0,但是这个点需要保留,因为可能影响到别 阅读全文