07 2020 档案

摘要:回文自动机 参考: 回文树 // Created by CAD #include <bits/stdc++.h> #define ll long long using namespace std; const int maxn=3e5+5; namespace pam{ int sz,tot,las 阅读全文
posted @ 2020-07-29 16:22 caoanda 阅读(107) 评论(0) 推荐(0) 编辑
摘要:P3649 [APIO2014]回文串 根据后缀链接,形成的回文树,对于每一个节点,其子树大小(包括该节点)即为该回文串的出现次数。 // Created by CAD #include <bits/stdc++.h> #define ll long long using namespace std 阅读全文
posted @ 2020-07-29 16:10 caoanda 阅读(113) 评论(0) 推荐(0) 编辑
摘要:Fibonacci Sum 利用斐波那契通项求和,并二项式展开即可。其中求斐波那契需要用到二次剩余求根号5的值。 // Created by CAD #include <bits/stdc++.h> #define ll long long using namespace std; const in 阅读全文
posted @ 2020-07-29 10:33 caoanda 阅读(163) 评论(0) 推荐(0) 编辑
摘要:B. Binary Vector fn的意思是随机生成 n 个 n 维向量,这 n 个向量线性无关的概率。 线性无关指的是向量之间不能相互表示,既不存在解(至少要有一个 k 非0)使得k1+...+kn=0这个式子成立。 依次选取n个向量: 第一个向量非零即可,有$2n 阅读全文
posted @ 2020-07-28 10:20 caoanda 阅读(523) 评论(0) 推荐(0) 编辑
摘要:C. Count New String 参考:Count New String(广义SAM) 把所有的字符串都存进去,然后再求出不同的子串个数即可。 // Created by CAD #include <bits/stdc++.h> #define ll long long using names 阅读全文
posted @ 2020-07-26 14:33 caoanda 阅读(156) 评论(0) 推荐(0) 编辑
摘要:P3804 【模板】后缀自动机 (SAM) 参考: 不同子串个数 用d[i]来表示该状态点是否为终止点,最后利用每个点的后缀链接形成一棵树,每个点所表示的最长字符串都是其子树中各节点的最长公共后缀。 // Created by CAD #include <bits/stdc++.h> using n 阅读全文
posted @ 2020-07-26 13:58 caoanda 阅读(155) 评论(0) 推荐(0) 编辑
摘要:Watchcow 从任意一个节点开始,求一个欧拉回路即可。 // Created by CAD #include <iostream> #include <vector> #include <map> #define pii pair<int,int> #define fi first #defin 阅读全文
posted @ 2020-07-24 21:50 caoanda 阅读(134) 评论(0) 推荐(0) 编辑
摘要:二次剩余 参考: 二次剩余Cipolla算法学习笔记 #include <bits/stdc++.h> using namespace std; const int mod=1e9+9; namespace TwoRemain { template <typename A, typename B> 阅读全文
posted @ 2020-07-22 12:42 caoanda 阅读(142) 评论(0) 推荐(0) 编辑
摘要:字典树 字典树比较普通字符串比较而言,字符的可操作性更强 const int maxn=5e5+5; //maxn为总结点个数,不是总深度 struct trie{ int nex[maxn][26],cnt=0; bool exist[maxn]; void insert(string s){ i 阅读全文
posted @ 2020-07-21 11:45 caoanda 阅读(117) 评论(0) 推荐(0) 编辑
摘要:于是他错误的点名开始了 直接用字典树维护即可,不过这个题其实直接用map也能过… 字典树: // Created by CAD #include <bits/stdc++.h> using namespace std; const int maxn=5e5+5; struct trie{ int n 阅读全文
posted @ 2020-07-21 09:34 caoanda 阅读(105) 评论(0) 推荐(0) 编辑
摘要:G. Operating on a Graph 这道题需要注意的点是,合并的时候需要用链表O(1)进行合并或者用 vector 启发式合并,这样才不至于复杂度过大,另外,去重的时候,如果用哈希 map 会导致超时,而用 map 则不会 // Created by CAD #include <bi 阅读全文
posted @ 2020-07-19 23:44 caoanda 阅读(145) 评论(0) 推荐(0) 编辑
摘要:C. Operation Love 先判断给定点是顺时针还是逆时针,然后再判断长度为6的边是在长度为9的边的左边还是右边即可 // Created by CAD #include <bits/stdc++.h> using namespace std; bool judge(vector<doubl 阅读全文
posted @ 2020-07-19 10:14 caoanda 阅读(152) 评论(0) 推荐(0) 编辑
摘要:判断一个多边形的给定点是按顺时针给出还是逆时针 参考:判断一个多边形是顺时针还是逆时针的方法 bool judge(vector<double> x,vector<double> y,int n){ //1逆时针,0顺时针 if(n < 3) return 0.0>0; double s = y[0 阅读全文
posted @ 2020-07-19 10:11 caoanda 阅读(256) 评论(0) 推荐(0) 编辑
摘要:G. Greater and Greater 参考:2020牛客多校第二场 G题Greater and Greater(bitset) 要仔细观察规律,当看不出规律的时候,可以试着排序一下,看看能不能进行优化。 bitset 运算的复杂度为O(n/32),可以加快运算速度 // Created 阅读全文
posted @ 2020-07-18 09:29 caoanda 阅读(172) 评论(0) 推荐(0) 编辑
摘要:A. All with Pairs 参考:A. All with Pairs (哈希值+next) 需要用到的东西是字符串哈希和前缀数组。 首先用字符串哈希将每一个后缀都统计一下,并用不同的后缀会映射为不同的哈希值,所以这样就可以在O(1)的时间复杂度内比较出两个字符串是否一样。 还要考虑到的事 阅读全文
posted @ 2020-07-16 12:59 caoanda 阅读(154) 评论(0) 推荐(0) 编辑
摘要:A. B-Suffix Array 参考:2020年牛客多校A题 将字符串化为B数组之后,会发现,它其实是由两部分组成的。例如aaaabaaab的B数组为011102114,那么我们可以将B拆成两半,前面一部分是01110,后面一部分是2114。我们会发现,所有长度的B数组前面部分的格式都是一样的, 阅读全文
posted @ 2020-07-15 09:17 caoanda 阅读(208) 评论(0) 推荐(0) 编辑
摘要:I. 1 or 2 依次遍历所有的点,对于遍历的当前点,选择所需的边,直到度数饱和。当遍历点的序号 大于n时,则证明该解法时是可行的。 但是要注意的时候,遍历之前需要将节点按照邻接表的大小进行排序,这样时间复杂度会低一点。 解法也算是暴力吧,只不过优化了一下。 // Created by CAD o 阅读全文
posted @ 2020-07-14 16:15 caoanda 阅读(378) 评论(0) 推荐(0) 编辑
摘要:Boundary 参考:2020牛客多校(第二场) B. Boundary (计算几何) 因为三点确定一个圆,其中原点是固定的,所以只用遍历另两个点就可以了。这样复杂度是O(n2)的。另外还要用一个 map 来保存所有的圆心,以此来统计相同的圆心的个数。 要注意的是判断三点一线的情况,这种情况 阅读全文
posted @ 2020-07-14 13:42 caoanda 阅读(404) 评论(0) 推荐(0) 编辑
摘要:Fake Maxpooling 在初始化数组的时候如果直接求可能会t,所以用这种筛法,把复杂度降为O(nm),最后用单调队列来维护区间最大值。 for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) if(!a[i][j]) for(int k=1;k*i<=n& 阅读全文
posted @ 2020-07-14 09:26 caoanda 阅读(175) 评论(0) 推荐(0) 编辑
摘要:Cover the Tree 就当作是一个结论吧…当要用链覆盖所有的边时,对叶子节点根据dfs序排序后,根据(i,i+s/2)的配对规则进行配对即可,如果有奇数个叶子节点,则将其与根节点相连。 // Created by CAD on 2020/7/13. #include <bits/stdc 阅读全文
posted @ 2020-07-13 20:58 caoanda 阅读(158) 评论(0) 推荐(0) 编辑
摘要:D - Omkar and Circle 参考:Codeforces Round #655 (Div. 2) 题解 (ABCD) 由题意可得,每次只取(n+1)/2个数,且只有一对数相邻。最后选取位置是奇数位或者偶数位。 用几个样例手推,来发现规律 // Created by CAD on 20 阅读全文
posted @ 2020-07-12 23:29 caoanda 阅读(345) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示