- 博客(47)
- 资源 (2)
- 收藏
- 关注
原创 【ACM-ICPC 2018 沈阳赛区网络预赛】B. Call of Accepted ----中缀表达式计算
题目传送门题意:给你一个表达式由+,-,*,d,( ),组成。运算符左边的元素>=0,右边的元素>=1其中d的运算规则是,比如3d6,指3次掷6面体骰子,出现的数值为[1,6]。现在让你求表达式的最大和最小做法:经典的中缀表达式转后缀表达式(逆波兰式)算法:复习复习~中缀表达式 —> 后缀表达式1. 数字:直接输出2. 运算符:如果栈顶运算符的优先级&g...
2018-10-29 21:05:35 135
原创 【ACM-ICPC 2018 沈阳赛区网络预赛】I.Lattice's basics in digital electronics ---- 字典树
题目传送门做法: 用字典树存好译码词,然后模拟即可AC代码:#include <bits/stdc++.h>using namespace std;#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)#define pb(x) push_back(x)#define s...
2018-10-28 11:56:18 164
原创 【ACM-ICPC 2018 焦作赛区网络预赛】L. Poor God Water ---- 矩阵快速幂 or 杜教BM算法
题目传送门做法:我们设(肉,鱼,巧) —&amp;gt; (0,1,2)f(i,j,k) i表示第i小时,j表示当前状态,k表示上一状态 j,k ∈\in∈ (0,1,2)从n = 3 开始,我们利用后两项推前一项可得f(i,0,0)=f(i−1,0,1)+f(i−1,0,2)f(i,0,0)= f(i-1,0,1) + f(i-1,0,2)f(i,0,0)=f(i−1,0,1)+f(i...
2018-10-26 22:19:26 219
原创 【ACM-ICPC 2018 沈阳赛区网络预赛】D. Made In Heaven ---- 第K短路(A*算法)
题目传送门做法:A*算法(最佳搜索算法,基于启发式)(人工智能课上也学习了)讲解:求图的第K短路(A*算法与最短路的应用)A* &amp;&amp; 第k短路详解 (详尽)存个板子~AC代码: 基于邻接表#include &lt;iostream&gt;#include &lt;cstdio&gt;#include &lt;cstdlib&gt;#incl
2018-10-26 17:00:56 217
原创 [牛客]牛客国庆集训派对Day2 F.平衡二叉树 ---- 递推 or 记忆化搜索
题目传送门做法:其实一开始推东西,推的太细了反而里通解越来越远~ _(:з」∠)_首先要满足最优解,我们可以把最大的左子树看成满二叉树,然后去想右子树是怎么构造的即可。这棵右子树,它的左右子树必定满足结点之差<=d,且左右之差为d的时候最优,那么递归定义其左子树dp[h-1],右子树dp[h-1-d]。我们发现d>=h时,f[h] = h 为最优解。于是有了以下递推式...
2018-10-26 11:44:56 119
原创 [HDU] (3874) Necklace ---- 离线操作+树状数组
题目传送门几乎完全一样的题目(区间内不同数的个数): 传送门题意: 给你n个数,q次查询,问这个区间内,区间内数的和为多少,每个不同的数只能取一次。做法:莫队也可做,但是了解到树状数组也可以进行离线操作。思路就是,记录相同数字中上一个数字出现的位置。按照查询区间的右端点排序,从小到大访问右端点,更新当前位置时,如果之前有出现过相同的数字,相同数字所在的位置处更新为-a[i],否则更新...
2018-10-25 16:04:27 162
原创 [SPOJ] (1812) Longest Common Substring II ---- SAM(多个串的最长公共子串)
题目传送门做法:类似求两个串的最长公共子串。我们对第一个串建立自动机,然后把剩余的n-1个串放进自动机上匹配。每个串都保存它们在每个状态上的匹配的最大长度ml, 然后对于每个状态,维护一个数组mn[p],表示当前串在此状态的LCS。对于每个状态我们要取mn[p]中的最小值。然后答案就是所有状态中最小值的最大值。注意,如果当前状态存在祖先,那么它的祖先的ml要更新其length,为什么呢...
2018-10-24 15:44:28 411
原创 [SPOJ] (1812) Longest Common Substring ---- SAM(最长公共子串)
题目传送门做法:后缀家族的基本应用,之前学习了后缀数组的解法,后缀自动机的思想如下:给第一个串建立自动机,第二个串在自动机上匹配,通过tran数组,如果匹配就len+1,否则通过slink数组(fa)向前跳,直到能继续匹配。AC代码:#include<bits/stdc++.h>using namespace std;#define IO ios...
2018-10-23 15:38:13 220
原创 【ACM-ICPC 2018 南京现场赛 】 J.Prime Game ---- 思维+素数筛
题目:做法: 计算出来每个数的质因子在各个区间的贡献。以第二组样例为例:第一个元素的素因子2:它能贡献的区间有[1,1],[1,2],……,[1,10] 10个区间第一个元素的素因子3:它能贡献的区间有[1,1],[1,2],……,[1,10] 10个区间当前sum = 10+10第二个元素的素因子7:它能贡献的区间有[1,2],[1,3],……,[1,10] 9个区...
2018-10-22 17:47:45 1604 2
原创 [UVALive](7908)World Cup ---- 枚举子集(暴力)
题目传送门做法: 模拟赛时6重循环暴力过了,但是听了听超霸的三进制枚举子集,感觉有些意思,就写了写,其中中间代码比较糙,没有优化,无脑写的。AC代码:#include&lt;bits/stdc++.h&gt;using namespace std;#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0...
2018-10-22 17:14:36 138
原创 Codeforces Round #517 (Div. 2) B.Curiosity Has No Limits ---- DFS
题目传送门做法: DFS搜索即可,想构造写炸了……AC代码:#include<bits/stdc++.h>using namespace std;#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)#define pb(x) push_back(x)#define sz...
2018-10-22 10:38:47 101
原创 【ACM-ICPC 2018 青岛赛区网络预赛】H. Traveling on the Axis ---- 前缀和+规律
题目传送门做法:我们很容易推出,对于每一个位置到终点,先判断起始位置是1or0,是1初始化为1,是0初始化为0从当前位置往后相邻两项如果不一样,那么+1,如果一样+2举个例子:1 0 11位置: 1 1+1 1+1+12位置: 2 2+13位置: 1ans = 1+2+3+2+3+1 = 12然后多写几组数据,我们发现后一项是前一...
2018-10-19 21:22:13 180
原创 【ACM-ICPC 2018 焦作赛区网络预赛】H. String and Times ---- 后缀自动机
题目传送门做法:计算出每个状态下的endpos,通过endpos在区间内统计maxlen[st] - minlen[st]+1即 maxlen[st] - minlen[st]+1 = l[st] - l[slink[st]];模板题AC代码:#include<bits/stdc++.h>#define IO ios_base::sync_with_...
2018-10-19 12:24:40 156
原创 [Hihocoder](1449)后缀自动机三·重复旋律6 ---- 不同长度下出现次数最多的子串(SAM)
题目传送门做法:原题中小Hi 的讲解循序渐进,比我好,好好吸收他的讲解即可。不过这里要说一个自己异议的地方,就是自己认为这一步没有必要。但是网上包括题目本身都加了这句话,我没加我也AC了。所以对此持疑惑态度。因为我们知道ans[i] 一定&gt;= ans[i+1],也可能是自己自动机写法的原因吧,如果有各位巨巨有想法,可以和我讨论~AC代码:#include&lt;...
2018-10-19 11:39:26 285
原创 [HDU](4622)Reincarnation ---- 后缀自动机or后缀数组(区间内不同子串的个数)
题目链接做法:SA做法: 复杂度O(t * q * (n*log(n))) 暴力解法,注:(q>n) 7e8 险过……对于每次查询,把这段区间内的字符串,建立后缀数组,然后用(n-1)-sa[i]-height[i]计算。SAM做法: 复杂度O(n^2+q) 4e6在线建立串S每个后缀的SAM,用一个变量维护区间内子串的个数,保存到二维数组里面。离线查询即可后缀数组:AC...
2018-10-18 16:42:42 470
原创 [洛谷] (P3804)【模板】后缀自动机 ---- SAM(模板题)
题目传送门做法:考察SAM的基本概念,即各个状态的endpos集合的大小怎么求?我们从parent树上自底向上跑,类似树的遍历(即回溯过程),去统计集合的大小即可。AC代码:#include<bits/stdc++.h>#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)#def...
2018-10-18 12:44:25 254
原创 [Hihocoder](1175)拓扑排序·二 ---- 简单拓扑排序
题目传送门做法: 开一个数组num用来记录和传递病毒数量AC代码:#include<bits/stdc++.h>#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)#define pb(x) push_back(x)#define sz(x) (int)(x)....
2018-10-17 22:11:16 90
原创 [Hihocoder](1445)后缀自动机二·重复旋律5 ---- SAM构造
题目传送门做法:我们知道SAM中 l[st] 数组的意义是状态st的最长子串的长度从前一状态到当前状态的转移所增加的子串数量:l[st] - l[slink[st]]AC代码:#include&lt;bits/stdc++.h&gt;#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)#d...
2018-10-17 21:06:02 138
原创 【后缀自动机学习笔记】
前言历经两天,看了大大小小的后缀自动机的知识讲解,看来看去,还是觉得HihoCoder上的SAM系列讲解的最白话最让人容易理解。HihoCoder 讲解是按照 问题提出—&amp;gt;引入SAM概念----&amp;gt;模拟SAM----&amp;gt;构造SAM 这个顺序进行的,适合入门看。放一下链接:进入网页后,点里面的解题方法提示即可后缀自动机·基本概念后缀自动机·构造PS:推荐各位认真阅读上述...
2018-10-17 20:55:12 200
原创 [Hihocoder](1441)后缀自动机一·基本概念 ---- 模拟
题目传送门做法:原文中对SAM概念的讲解很详细了,值得入门的时候先学习这个~模拟即可AC代码:#include&lt;bits/stdc++.h&gt;#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)#define pb(x) push_back(x)#define sz(x)...
2018-10-16 20:49:27 267
原创 [HDU](6153)A Secret ---- 扩展KMP
题目传送门题意:给你两个串s1,s2,让你求s2的所有后缀在s1中出现的频率乘以后缀长度的和。做法:逆向思维,我们发现如果将s1,s2翻转,s2原来的所有后缀就变成了前缀。我们知道扩展KMP中extend[i]的含义是文本串后缀i与模式串的最长公共前缀的长度如果我们对s1,s2使用扩展KMP,求得extend[i],他表示的是s2整个字符串与s1后缀i的最长公共前缀的长度ni,那么s2...
2018-10-15 21:51:59 125
原创 [HDU](2594)Simpsons’ Hidden Talents ---- 扩展KMP
题目传送门做法:扩展KMP模板题扩展KMP:用来求文本串所有后缀与模式串的LCP详细教程:扩展KMP算法AC代码:#include&lt;bits/stdc++.h&gt;#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)#define pb(x) push_back(x)#...
2018-10-15 19:22:05 114
原创 [Hihocoder](1419)后缀数组四·重复旋律4 ---- 后缀数组(最长连续重复子串)★
题目传送门做法:原题给的提示已经讲解的非常详细,这里说一下自己对下面式子的理解lcp( p - ( l - lcp (p,p+l) % l ) , p-l + lcp (p,p+l) % l +l)lcp(p,p+l)/l +1 是连续重复子串的个数lcp(p,p+l)%l 就是多出的一部分,这部分串来自后缀p+l比如原题中给的栗子,lcp(4,4+4) = lcp(4,8...
2018-10-15 14:18:51 127
原创 Codeforces Round #516 (Div. 2) D. Labyrinth ---- BFS+思维
题目传送门做法:优先选取列,然后在向左右扩展。然鹅,有思路,却不会处理,看了本场Rank1,有双端队列巧妙处理列和行的优先级,才发现处理更简洁+易懂。ORZ我们优先将列放到队首,因为列是不需要消耗步数的,然后再将左右放到队尾,然后依次访问+标记,即可。AC代码:#include<bits/stdc++.h>#define IO ios_base::s...
2018-10-15 12:46:24 129
原创 [POJ](2406)Power Strings ---- KMP(连续重复子串)
题目传送门做法:KMP利用最小循环节周期那么 周期个数 = len/ len - nex[len] 即是答案看了罗神的论文,试着用后缀数组做一下,TLE,这个题倍增会被卡常,DC3可过,但是时间复杂度远大于KMP。总结:KMP为最优解有时候同一个题,从不同的做法切入,即是A不掉,也是一次不错的收获(^-^)V温故知新~AC代码://#include<bits/stdc...
2018-10-13 20:17:21 181
原创 [URAL](1297)Palindrome ---- 后缀数组 or Manacher(最长回文子串)
做法:最长回文子串两种解法:1. Manacher 复杂度O(n)2. 后缀数组+RMQ 复杂度O(n*log(n))AC代码://Manacher #include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algor...
2018-10-13 16:09:26 167
原创 [SPOJ](694)Distinct Substrings ----后缀数组(不相同子串的个数)
题目传送门做法:一个字符串的某一子串一定是某一后缀的前缀而且有一个很容易发现的性质排完序后的后缀数组suffix(sa[i]),suffix(sa[i+1]),suffix(sa[i+2]),…… ,suffix(sa[n])相邻两后缀之间增加的子串数量为 (n -1)- sa[i]+1,但是相邻两头缀之间又有公共前缀,所以ans = (n-1)-sa[i]+1-height[i] ...
2018-10-12 22:14:31 102
原创 [UVA](11235)Frequent values ---- RMQ+思维
题目传送门做法: 白书上的经典题。说一下自己的理解:首先,题目中给的是不下降序列,也就是说相同的元素会在某一区间内。我们把相同的元素归为一块,把整个序列分块!cnt[块号] 用来记录块中相同元素的个数val[块号] 用来记录块中元素的值num[pos] 用来记录当前的下标所对应的元素属于哪个块left[块号] 用来记录这一块的左端点right[块号] 用来记录这一块的右端点我们...
2018-10-12 17:41:50 93
原创 [Hihocoder](1415)后缀数组三·重复旋律3 ---- 后缀数组(最长公共子串)
题目传送门做法:我们知道,字符串中任意一个子串都是某个后缀的前缀我们也知道了Height数组的含义是排名为i的后缀与排名i-1的后缀的最长公共前缀,即就是最长公共子串。现在题意让我们找两个串的最长公共子串,普通的KMP是无法解决这样的匹配的问题,因为KMP是完全匹配,而本题可出现子串的匹配。通过上述,我们发现,我们可以有这样的思路,即将两个串合成一个,求Height数组,那Height...
2018-10-11 20:56:18 146
原创 [POJ](1743)Musical Theme ---- 后缀数组(最长不可重叠重复子串)
题目传送门题意:给你一个长度为n的序列,序列中的元素大小为[1,88]。现在让你找重复主题:主题指序列中的一个子串,其中满足以下条件1.长度&gt;=52.子串元素间的差值相等。3.重复出现的同一主题不能有公共部分。求满足题意的最大主题长度,即就是最长不可重叠子串做法:预处理的时候,把原输入的数组差分处理成新数组。求得的最大长度为kans就是k+1比如:n = 101...
2018-10-11 17:22:02 177
原创 [Hihocoder](1407)后缀数组二·重复旋律2 ---- 后缀数组(最长不可重叠重复子串)
题目传送门做法:最长可重叠重复子串可以利用Height数组轻易解决。不可重叠其实利用Height数组也是很巧妙地~同样基于二分的思路,我们二分这个长度k,找到Height数组&gt;=k的,把它们这些后缀分为一组,再判断后缀最大值与最小值的差值是否&gt;=k 即可。详细可参考下面罗穗骞的论文:https://wenku.baidu.com/view/5b886b1ea76e58fafa...
2018-10-11 16:07:04 159
原创 [Hihocoder](1403)后缀数组一·重复旋律 ---- 后缀数组(最长可重叠重复子串)
做法:height[i]:lcp(sa[i],sa[i−1]),即排名为i的后缀与排名为i−1的后缀的最长公共前缀 裸的问题可重叠重复子串问题,二分height数组的最大值并满足>=k即可AC代码:#include<bits/stdc++.h>#define IO ios_base::sync_with_stdio(0),cin.tie(0),c...
2018-10-10 17:34:28 202
原创 [Codeforces-Gym] (101550C)Card Hand Sorting ---- 状态压缩+思维
题目传送门题意:给你一副扑克牌,其中不包括大王和小王,共52张,即4*13 有四种花色分别定义为s,h,d,c 然后扑克牌的数字从2~9 大小定义为依次从小到大,剩下的大小为A>K>Q>J>T>9 现在给你n张扑克牌,让你给他们排好序,注:这种排序不是交换相邻的那种,而是可以选择一张插入到某个位置 排序的要求是:同一类型的扑克牌按照降序或升序排列,不同...
2018-10-09 17:12:02 146
原创 [UPC](9517)Princess Principal ---- 并查集+栈+技巧离线查询
题目传送门做法:我们发现,满足题意的区间有以下情况: 1. [ ( ) ] 2. [ ] ( ) 3. ( ) ( ) 学过数据结构的童鞋都知道利用栈实现括号匹配。同理这个题的解法也是离不开的。 我们把满足题意的区间下标加到并查集里面,然后离线查询就可以判断该区间是不是合法的。 但是,我们要注意这种情况 -----> () () (...
2018-10-08 17:55:28 123
原创 [UPC](9519)New Game ---- 最短路
题目传送门做法:O(n^2)圆与圆两两之间建图,O(2*n)圆与直线建图。 注意考虑圆与圆相交,圆与直线相交的情况。赛场因此WA了好几发 (图还是敲的少 QAQAC代码:#include<bits/stdc++.h>#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)#def...
2018-10-08 13:46:56 101
原创 [UPC](3025)Fleecing the Raffle ---- 组合数学+概率
题目传送门做法:概率论学的比较好的话,应该可以直接写出公式。 但自己是根据样例,试着推了推,也能写出公式。你会发现,放入x张纸,你写出来的当前的概率公式分子连乘和分母连乘后都是一样一样的。 即 (n!)/(n-p+1)! * (n+x-p)!/(n+x)! 我们从1~n枚举这个公式,找最大值即可。 该题会卡精度,所以使用gamma函数优化阶乘运算,防止溢出,即将乘法改为对数的...
2018-10-08 12:07:03 140
原创 Codeforces Round #454 (Div. 1) D. Power Tower ---- 广义欧拉定理降幂★
公式:注意:比较大小以及使用map记忆化欧拉函数值,否则会WA or TLE自定义Mod,这种写法,会在快速幂中自行判断大小,比较无脑AC代码:#include<bits/stdc++.h>#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)#define pb(x) ...
2018-10-07 10:20:55 322
原创 [Codeforces-Gym] (101550E)Exponial ---- 广义欧拉定理降幂★
题目传送门 自己天真以为无法互质就没有办法降幂,其实还有广义欧拉定理!QAQ a^b mod c = a^(b mod phi(c) + phi(c)) 相关知识及其证明:求幂大法(广义欧拉定理)及其证明AC代码:#include<bits/stdc++.h>#define IO ios_base::sync_with_stdio(0)...
2018-10-06 21:58:18 407
原创 [HDU](3342)Legal or Not ---- 拓扑排序 or DFS(判断有向图中是否有环)
题目传送门做法:复习拓扑排序是指一个有向无环图形成的序列,本身就可以判断有向图是否合法。即有无环 DFS类似爆搜,但是一旦出现有环的情况,可以使用剪枝。 两者时间复杂度差不多,均为O(n+e)AC代码:DFS#include<bits/stdc++.h>#define IO ios_base::sync_with_stdio(0),cin.tie...
2018-10-06 08:50:32 282
原创 [UPC](2783)Matrix Cypher ---- 矩阵初等变换
做法:感觉复习了一波线性代数~233,记录一下,防止忘记 这个题,通过题目中给的两个矩阵,会发现,当是0字节的时候,它会把矩阵第二列中的值乘1加到第一列,第二列不变。 当是1字节的时候,它会把矩阵第一列中的值乘1加到第二列,第一列不变。 即这是最基本的矩阵初等列变换。 我们每次判断第一列值的和 和第二列的和 谁大谁小,然后逆向模拟即可。AC代码:import java.lang...
2018-10-05 20:41:59 162
Bellman-Ford模板
2018-03-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人