- 博客(34)
- 收藏
- 关注
原创 K-th occurrence (后缀自动机上合并权值线段树+树上倍增)
AC代码:#include<iostream>#include<cstring>#include<vector>using namespace std;const int MAXN = 1e5 + 5;int N, L, R, K, Q;char S[MAXN];int u[MAXN];//1...rint EndPosToTree[2 *...
2020-01-30 18:17:09 339
原创 Longest Common Substring(最长公共子串)
SP1811题目描述A string is finite sequence of characters over a non-empty finite set Σ.In this problem, Σ is the set of lowercase letters.Substring, also called factor, is a consecutive sequence of ch...
2020-01-26 20:21:07 448
原创 数字子串的和 str2int
UVA1673这道题可以用广义后缀自动机,不过陈锋老师给我们讲了一个巧妙地方法,使得这道题可以用普通的后缀自动机做。题目大意:给出NNN个完全由数字组成的字符串。计算将这个NNN的字符串的所有子串转换为整数后先去重再求和的结果,输出其模2012的余数。也就是求其子串的所有本质不同的字符串的和。预处理:首先,我们可以将NNN个字符串拼接起来,拼接的部位可以用一个特殊的分隔符隔开。比如这里...
2020-01-26 16:59:47 404
原创 Substrings
SP8222You are given a string S which consists of 250000 lowercase latin letters at most. We define F(x) as the maximal number of times that some string with length x appears in S. For example for st...
2020-01-26 15:54:15 161
原创 Reincarnation
HDU4622Now you are back,and have a task to do:Given you a string s consist of lower-case English letters only,denote f(s) as the number of distinct sub-string of s.And you have some query,each tim...
2020-01-26 15:16:09 140
原创 New Distinct Substrings
SP705Given a string, we need to find the total number of its distinct substrings.InputTTT- number of test cases.T<=20T<=20T<=20; Each test case consists of one string, whose length is <...
2020-01-26 15:00:18 233
原创 Glass Beads
UVA719将循环串SSS展开成两倍大小:S+SS+SS+S,这样线性处理就可以处理所有循环的情况了。对S+SS+SS+S建立一个后缀自动机,让后从初始状态开始走,每次选择字典序最小的道路,走NNN步就得到一个字典序最小的原串了。假设最后走到ppp,那么此时首字符下标即为len(p)−N+1len(p)-N+1len(p)−N+1,即从首字符的位置走了NNN步到ppp。AC代码:#incl...
2020-01-26 14:43:20 490
转载 转载-后缀自动机讲解
https://www.cnblogs.com/zjp-shadow/p/9218214.html#autoid-4-0-0作者:zjp_shadow
2020-01-26 14:28:32 177
原创 照亮体育馆 Barisal Stadium
UVA10641题目为逆时针顺序编号,这里直接将数组开两倍来处理环。(然而不知为啥开到1000也能过)定义:Corners[i]Corners[i]Corners[i]为体育馆点的坐标。Lights[i]Lights[i]Lights[i]为灯的坐标及费用。IsShineOnCur[i]IsShineOn_{Cur}[i]IsShineOnCur[i]表示第CurCurCur盏灯是否能...
2020-01-24 02:49:36 1347
原创 禁止的回文子串 Dyslexic Gollum
UVA1633一个长的回文串都可以由短的回文串拓展而来,只要短的回文在左右两端增加相同的字符即可。因此,在考虑长度为NNN的01串时,只要在从长度为1向NNN拓展的过程中,保证后KKK个字符不是回文串即可。定义:dp[i][j]dp[i][j]dp[i][j]为考虑长度为i的串的后KKK个字符组成的子串为jjj时的合法字符串的数量。IsPalindrome[i][j]IsPalindrom...
2020-01-23 23:08:24 265
原创 棒球投手 Pitcher Rotation
UVA1379定义:Map[i][j]Map[i][j]Map[i][j]为对战第i支队伍时,胜率排名第j位的棒球手的胜率Schedule[i]Schedule[i]Schedule[i]为第i天的对手dp[i][a][b][c][d]dp[i][a][b][c][d]dp[i][a][b][c][d]为考虑到前i天时,第i天派出胜率排名第a位,第i-1天排除第b位,第i-2天排出第c位,...
2020-01-23 01:35:36 437
原创 佳佳的筷子 Chopsticks
UVA10271首先,将筷子逆序读入,即使得读入的ChopsticksChopsticksChopsticks数组中的元素时降序的。这样在考虑前iii只筷子时可以选iii和i−1i-1i−1,而第三只(最大那只)在i−1i-1i−1之前选一个没被用过的即可。定义:dp[i][j]dp[i][j]dp[i][j]为考虑前i个筷子并选了j个三元组后的最小权值和。初始化:dp[i][0]=0...
2020-01-22 22:41:16 817 1
原创 学习向量 Learning Vector
UVA12589预处理:首先,我们将所有向量按斜率从大到小排序。因为在连上某个向量时,在他之前的向量都会为它贡献底部的面积。观察题目的图,可以发现除了第一个向量之外,剩下向量新增的面积都是由底部一个矩形和上面一个三角性组成,而三角形只和当前向量有关,当矩形面积等于当前的总高度乘当前向量的长。因此,向量放的越早,其为后续贡献的矩形面积就越多,因此选择先放斜率大的。定义:dp[i][j][k...
2020-01-22 21:57:17 501
原创 仓库守卫 Storage Keepers
UVA10163这道题需要两次dp1. 求最小安全指数最大值定义:dp[i][j]dp[i][j]dp[i][j]为考虑前i个人看守前j个仓库最小安全指数最大值,SafetyIndex[i]SafetyIndex[i]SafetyIndex[i]为第iii个人的能力值。初始化:dp[i][0]=infdp[i][0]=infdp[i][0]=inf(常数/0=无穷大)剩下的dp=0...
2020-01-22 16:15:57 347
原创 阿里巴巴 Alibaba
UVA1632这是一个区间动态规划定义:dp[i][j][0]dp[i][j][0]dp[i][j][0]为阿里巴巴收集完iii到jjj的宝藏后位于iii位置的最短耗时,dp[i][j][1]dp[i][j][1]dp[i][j][1]为阿里巴巴收集完iii到jjj的宝藏后位于jjj位置的最短耗时。(在最短耗时情况下,阿里巴巴收集完某个区间的宝藏后只能位于区间的边缘,不可能在内部,因为在内部的...
2020-01-22 02:45:00 3128
原创 密码锁 Locker
UVA1631定义:dp[i][x][y][z]dp[i][x][y][z]dp[i][x][y][z]为达到第iii个数字之前已经解锁,第iii个数为xxx,第i+1i+1i+1个数为yyy,第i+2i+2i+2个数为zzz的状态最少需要转动几下。详见注释AC代码:#include<iostream>#include<string>#include<cs...
2020-01-22 01:28:41 2418
原创 电子人的基因 Cyborg Genes
UVA10723有两个字符串S1,S2S_1,S_2S1,S2,求能包含他们的最短串。显然S1+S2S_1+S_2S1+S2可以包含S1S_1S1,又包含S_2,但是却不一定是最短的。为什么呢?因为S1,S2S_1,S_2S1,S2中有公共的子序列,这些子序列实际上最后只需要出现一次,而非两次。在S1+S2S_1+S_2S1+S2中就把这些公共的子串被计算了两次。比如样例中的...
2020-01-21 03:44:35 2971
原创 串折叠 Folding
UVA1630这是一个区间动态规划定义:dp[i][j]dp[i][j]dp[i][j]为iii到jjj的字符串能压缩成的最小长度,dps[i][j]dps[i][j]dps[i][j]保存iii到jjj的字符串能压缩成的最短字符串,S[i]S[i]S[i]表示第iii个字符(从1开始编号)。初始化:dp[i][i]=1dps[i][i]=S[i]dp[i][i]=1\\dps[i][i...
2020-01-21 02:03:02 275
原创 切蛋糕 Cake slicing
UVA1629定义:UpperLeftUpperLeftUpperLeft为矩形左上角,LowerRightLowerRightLowerRight为右下角。dp[UpperLeft.x][UpperLeft.y][LowerRight.x][LowerRight.y]dp[UpperLeft.x][UpperLeft.y][LowerRight.x][LowerRight.y]dp[Upp...
2020-01-20 16:35:35 515
原创 免费糖果 Free Candies
UVA10118定义:dp[a][b][c][d]dp[a][b][c][d]dp[a][b][c][d]为第0列取了aaa颗糖果,第1列bbb颗,第二列ccc颗,第三列ddd后剩下的糖果还能最多再装进口袋多少个。那么答案就是dp[0][0][0][0]dp[0][0][0][0]dp[0][0][0][0],即考虑所有糖果。Candies[i][j]Candies[i][j]Candies[...
2020-01-20 14:42:56 259
原创 校长的烦恼 Headmaster's Headache
UVA10817定义:s0s_0s0为没人教的科目的集合,s1s_1s1为恰好有一人教的科目的集合,s2s_2s2为至少有两人教的科目的集合。则定义dp[i][s1][s2]dp[i][s_1][s_2]dp[i][s1][s2]为考虑前i名教师时科目情况为相应科目情况为s1,s2s_1,s_2s1,s2时的最小花费。AllSetAllSetAllSet为全集。这里的集合采用二进...
2020-01-20 01:27:21 440
原创 完美的服务 Perfect Service
UVA1218定义:Son[i]Son[i]Son[i]为第iii个节点的子节点集dp[i]dp[i]dp[i]为以iii为根节点的最少服务器需求量dp[i][0]dp[i][0]dp[i][0]为将第iii个节点作为服务器的时的情况,即它的子节点既可以是服务器,又可以是客户端。dp[i][1]dp[i][1]dp[i][1]为第iii个节点为客户端且它的父节点为服务器的情况,即它的子...
2020-01-19 17:00:03 2168
原创 Party at Hali-Bula
UVA1220这是一个树上dp问题,求树的最大独立点集。首先,将所有名字都赋予一个编号,这里使用map。定义:dp[i][0]dp[i][0]dp[i][0]为以第iii名员工为根且第iii名员工不参加晚会的最优答案,dp[i][1]dp[i][1]dp[i][1]为第iii名员工参加晚会的答案;IsRepeat[i][0]IsRepeat[i][0]IsRepeat[i][0]为dp[i...
2020-01-19 15:21:35 356
原创 Another Crisis
UVA12186 定义:dp[i]dp[i]dp[i]为要使第iii名员工向其上级发信最少需要多少工人,DP(i)DP(i)DP(i)返回dp[i]dp[i]dp[i]的值,Son[i]Son[i]Son[i]为第iii名员工的所有直属下级。每一个员工都只有一个直接上级,因此不会有两个工人由同一上级。#include<iostream>#include<string&g...
2020-01-19 02:26:16 428
原创 Brackets sequence
UVA1626这是一道区间动态规划。定义:dp[i][j]dp[i][j]dp[i][j]为从第iii个字符到第jjj个字符组成的子串要成为正规子串最少要添加多少字符,SSS为字符串。初始化:dp[i][i]=1dp[i][i]=1dp[i][i]=1一个字符必定需要补充另一个才能匹配。dp[i+1][i]=0dp[i+1][i]=0dp[i+1][i]=0在转移方程中的dp[i]...
2020-01-19 01:39:43 1292
原创 Cutting Sticks
UVA10003这是一道区间动态规划定义:dp[i][j]dp[i][j]dp[i][j]为第iii个切割点到第jjj个切割点之间的木条的最小切割费用,Point[i]Point[i]Point[i]为第iii个切割点的位置。初始化:dp[i][i+1]=0dp[i][i+1]=0dp[i][i+1]=0因为相邻切割点之间没有切割点,不需要切割。Point[0]=0Point[n+1...
2020-01-18 19:02:01 1775
原创 划分成回文串 Partitioning by Palindromes
UVA11584这道题需要两次dp第一次定义:SSS为字符串,IsPalindrome[i][j]IsPalindrome[i][j]IsPalindrome[i][j]为第iii个字符到第jjj个字符组成的子串是否为回文i≤ji\leq ji≤j。初始化:IsPalindrome[i][i]=trueIsPalindrome[i−1][i]=(S[i]==S[i−1])IsPalin...
2020-01-18 17:11:29 2907
原创 Lighting System Design
UVA11400定义:dp[i]dp[i]dp[i]为考虑前种中灯泡的最小花费,PrefixSum[i]PrefixSum[i]PrefixSum[i]为前i种灯泡的需求量之和(前缀和)。初始化**:for (int i = 0; i < n; ++i) { dp[i] = lamps[i].K + PrefixSum[i] * lamps[i].C; }即前i种灯泡的需求都...
2020-01-18 16:27:41 427
原创 Jin Ge Jin Qu hao
UVA12563定义:dp[i][j]为考虑前i首歌并且总时长为j时最多能唱的歌曲数,Song[i]表示第i首歌的时长。转移方程:dp[i][j]=max(dp[i−1][j],dp[i−1][j−Song[i]])dp[i][j]=max(dp[i-1][j],dp[i-1][j-Song[i]])dp[i][j]=max(dp[i−1][j],dp[i−1][j−Song[i]])经...
2020-01-17 00:43:22 1683
原创 Unidirectional TSP
UVA116定义:dp[i][j]dp[i][j]dp[i][j]为从第iii行第jjj列走到最后一列的最小整数和,Road[i][j]Road[i][j]Road[i][j]为在最优方案下第iii行第jjj列的下一步的行数(记录路径),Map[i][j]Map[i][j]Map[i][j]表示第iii行第jjj列的数。代码从0编号到n−1n-1n−1,而题目是1到nnn,所以会有些不一样。...
2020-01-16 22:06:45 478
原创 The Tower of Babylon
UVA437一种砖块的三个边都可以当作高度,因此n中砖块对应有3*n中搭砖方式。定义:dp[i]为一第i中方式为底的最大高度,blocks[i]为第i中搭砖方式。#include<iostream>#include<algorithm>#include<cstring>using namespace std;int n, dp[91];struc...
2020-01-16 17:08:38 288
原创 A Spy in the Metro
UVA1025定义:dp[i][j]dp[i][j]dp[i][j]为在第iii时刻间谍到达第j个车站时在车站待的最短时间,RightTrain[i][j]RightTrain[i][j]RightTrain[i][j]表示在第iii时刻是否有从左向右开的列车,LeftTrain[i][j]LeftTrain[i][j]LeftTrain[i][j]同理。初始化:dp[0][1]=0dp[0...
2020-01-16 15:26:49 1588
原创 Game of Sum
题目链接题意:有一个长度为n的整数序列,两个人AAA和BBB轮流取数,AAA先取。一个玩家每次只能从左端或者右端取任意数量连续的数,但不能两边同时取。当所有的数都被取走时游戏结束,然后统计每个人取走的数的和,作为各自的得分。两个人采取的策略都是让自己得分尽可能高,并且两个人都很机智,求AAA的得分−B-B−B的得分后的结果。显然,最后整数序列的所有元素必定被AAA或BBB取得。定义:dp[...
2020-01-15 23:38:25 372
原创 And Then There Was One
题目链接约瑟夫环问题假设有nnn个数,编号为0,1,2,⋯n−10,1,2,\cdots n-10,1,2,⋯n−1,其中0和n−1n-1n−1相连,形成一个环,如图:.......0123n从0开始数kkk个,将这个数从环中移除,再数kkk个,再移除,问最后一个数是多少。假设n=7,k=3n=7,k=3n=7,k=3。那么第一次删除2,数列变成:0123456...
2020-01-15 00:46:57 345
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人