上一页 1 2 3 4 5 6 ··· 13 下一页
摘要:题目传送门 过年在家无聊补一下这周做的几道AC自动机的模板题 sol:AC自动机,还是要解决跳fail边产生的重复访问,但是这次用last边已经不行了,只能拿76分。我们把跳fail边的过程放到串扫描完之后一次性进行。 AC自动机 #include <bits/stdc++.h> using nam 阅读全文
posted @ 2020-01-25 19:48 Angel_Demon 阅读(17) 评论(0) 推荐(0) 编辑
摘要:题目传送门 过年在家无聊补一下这周做的几道AC自动机的模板题 sol:AC自动机,在fail边的基础上再加一个last边,指向真正有效的节点,跳fail边改成跳last边来跳过无效点。 AC自动机 #include <bits/stdc++.h> using namespace std; typed 阅读全文
posted @ 2020-01-25 19:35 Angel_Demon 阅读(28) 评论(0) 推荐(0) 编辑
摘要:题目传送门 过年在家无聊补一下这周做的几道AC自动机的模板题 sol:标准AC自动机,注意不能重复跳fail边,像"aaaaaaa...aaaaaaaa"这样的数据每跳一次fail边只往上走了一层。 AC自动机 #include <bits/stdc++.h> using namespace std 阅读全文
posted @ 2020-01-25 19:23 Angel_Demon 阅读(29) 评论(0) 推荐(0) 编辑
摘要:题目传送门 sol:先通过AC自动机构建字典,用$dp[i]$表示长串前$i$位的最小代价,若有一个单词$s$是长串的前$i$项的后缀,那么可以用$dp[i - len(s)] + val(s)$转移到$dp[i]$。 AC自动机 #include <bits/stdc++.h> using nam 阅读全文
posted @ 2020-01-23 12:39 Angel_Demon 阅读(52) 评论(0) 推荐(0) 编辑
摘要:题目传送门 sol:二分答案$K$,算大于$K$的乘积有多少个。关键在于怎么算这个个数,官方题解上给出的复杂度是$O(nlogn)$,那么计算个数的复杂度是$O(n)$的。感觉写着有点困难,自己写了一个复杂度是$O(nlog^{2}n)$,也够AC了。有正有负,控制边界有点难度。 二分答案 #inc 阅读全文
posted @ 2020-01-21 12:19 Angel_Demon 阅读(80) 评论(0) 推荐(0) 编辑
摘要:题目传送门 sol:根据题意建立流量网络然后跑网络流,这两天刚学的网络流,练练手。 网络最大流 #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int, int> PII; const 阅读全文
posted @ 2020-01-16 17:18 Angel_Demon 阅读(18) 评论(0) 推荐(0) 编辑
摘要:题目传送门 sol:题目的数据范围就是对解决方案的一种提示,原先以为当数据范围只有$20$的时候都是dfs或者二进制枚举这种,从这题了解到还有状压dp。不解释了,反正就是状压dp,做的不多,记录一下。 状压dp #include <bits/stdc++.h> using namespace std 阅读全文
posted @ 2020-01-13 16:43 Angel_Demon 阅读(35) 评论(0) 推荐(0) 编辑
摘要:题目传送门 sol:每个下标都有选和不选两种情况,所以总方案数是$2^{n}$,在$n$最大是$100000$的情况下不符合要求。可以这样想,假设$i^{p}=k$有符合题目要求的解,还有一个整数$j$,$j$不是$i$的整次幂,$i$也不是$j$的整次幂,那么$j^{p}=k$不可能成立,所以我们 阅读全文
posted @ 2020-01-13 16:06 Angel_Demon 阅读(84) 评论(0) 推荐(0) 编辑
摘要:题目传送门 sol:根据题意,可以把字符串截成两段,要求两段中最大的两个回文串相加最大的方案,于是跑马拉车维护一个前缀,再倒着跑马拉车维护后缀。因为最优方案肯定是在两个字母之间截,所以最后只考虑在'#'位置截断的情况 马拉车 #include <bits/stdc++.h> using namesp 阅读全文
posted @ 2020-01-12 12:28 Angel_Demon 阅读(38) 评论(0) 推荐(0) 编辑
摘要:C++实验:STL之vector #include <bits/stdc++.h> using namespace std; void Input(vector<int>& v) { int n, m; scanf("%d", &n); for (int i = 1; i <= n; i++) { 阅读全文
posted @ 2019-12-30 10:08 Angel_Demon 阅读(107) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 13 下一页