摘要:这次精神状态不怎么好,第一题的描述看得我就蛋疼。。。看完就速度写了~~~最终fst了%>__#include #include #include #include #include #include using namespace std;int main(){ int n,c; cin>>n>>c; int a,ans=0; cin>>a; for(int i=2...
阅读全文
摘要:比赛时候只做出AB,E题一眼看过去似乎线段树能搞,但是写完过不了样例,才发现看错题了,然后比赛就没啥时间了~~整体状况还是很糟糕,A,B题实在出得太慢,然后持续到现在还没出过C题。。。不能更弱%>_#include #include #include #include using namespace std;#define MAXN 1005bool visit[MAXN][MAXN];int ...
阅读全文
摘要:题目大意 给定一棵树,要求你按给定的叶子节点顺序对整棵树进行遍历,并且恰好经过2*n-1个点,输出任意一条符合要求的路径 题解 每次从叶子节点开始遍历到上一个叶子节点就OK了, 这个就是符合要求的路径 代码: #include #include #include #include #include using namespace std;#define MAXN 305vectorG[MAXN],...
阅读全文
摘要:题目大意给定一个字符串S,要求你找到一个最长的子串,它既是S的前缀,也是S的后缀,并且在S的内部也出现过(非端点)题解KMP的失配函数f[i]的非零值就是前i个字符的一个最长前缀且也是后缀的字符串的末尾位置,倒过来求每一个f[i],并且判断是否在S的内部是否出现即可代码:#include #include #include #include using namespace std;#define MAXN 1000005char T[MAXN],s[MAXN];int f[MAXN];void getfail(char *p,int len){ int j; f[0]=j=-1; ...
阅读全文
摘要:题目大意 如果把字符串a重复m次可以得到字符串b,那么我们称字符串a为字符串b的一个因子,现在给定两个字符串S1和S2,求它们的公共因子个数 题解 如果它们有公共因子,那么显然它们的最小公共因子肯定是相等的~~~,公因子就是字符串的最短循环节~~~所以我们先把两个最短循环节给求出来,并判断是否相同,如果相同的话就是它们的最小公因子,然后所有的最小公因子的倍数并且是S1和S2的公约数都是它们的公因子...
阅读全文
摘要:题目大意 给定一个字符串T,接下来有n个字符串,对于每个字符串S,判断是否存在T[a…b]+T[c…d]=S(1 ≤ a ≤ b #include #include #include using namespace std;#define MAXN 1005char p[MAXN],T[MAXN*100];int f[MAXN],pos[MAXN],ans;void getfail(){ i...
阅读全文
摘要:题目大意 给定一个序列a[1],a[2]……a[n] 接下来给出m种操作,每种操作是以下形式的: l r d 表示把区间[l,r]内的每一个数都加上一个值d 之后有k个操作,每个操作是以下形式的: x y 表示把第x种操作一直到第y种操作都执行一遍 最终输出在k个操作结束之后的序列 题目大意 就是线段树的成段更新嘛~~~先用线段树统计每种操作的次数,然后再执行m次成段更新,最后查询到底的查询即可...
阅读全文
摘要:题目大意 给定一个含有N个数的序列,要求你对一些数减掉或者加上某个值,使得序列变为非递减的,问你加减的值的总和最少是多少? 题解 一个很显然的结果就是,变化后的每一个值肯定是等于原来序列的某个值,因为只需要变为非递减的,所以对于某个数要么不变,要么变成左右附件的某个值。这样我们就可以根据前述条件得出DP方程了:dp[i][j]=min(dp[i][j-1],dp[i-1][j]+|a[i]-b[j...
阅读全文
摘要:题目大意 给你N本书,每本书由一个厚度t[i](1或者2),宽度w[i],高度都是一样,把一些书竖着放,然后一些书横着放在同一层,就像下图那样放: 问你把所有的书放好之后竖着的书的总厚度是多少? 题解 题目有个重要条件,那就是每本书的厚度要么为1要么为2,因此我们可以根据书的厚度分为两类,然后每类按书的宽度从大到小排序,然后用二重循环进行枚举,把厚度为1的前i个和厚度为2的前j个竖着放,其他的横...
阅读全文
摘要:题目大意 给定一个长度不超过5*10^4的只包含小写字母的字符串,要求你求它的回文子序列,如果存在长度为100的回文子序列,那么只要输出长度为一百的回文子序列即可,否则输出它的最长回文子序列 题解 这个题很考验思维~~~相当不错的题,想到了就很简单,其实也就是充分利用题设。n的规模为5*10^4,如果不进行一些处理直接上O(n^2)算法肯定会超时,但是题目里有个很重要的条件,那就是如果存在长度为1...
阅读全文
摘要:这次做了ABC三题,D题知道是线段树,但是没能在二十分钟内写出来,弱成渣了,看来果断以后还得刷刷线段树,C题最终测试的时候悲剧了,Wrong answer on test34。赛后稍微改了下A了,D题也A 了。总得来说毛病还很多,这次的题目除了最后一题,其他的真心不难,做出四道题目来应该来说很简单,但是我还是只做出两道来。分析一下原因,还是自己能力不够,手速不够快,看英语题目也看得很慢,然后还没看...
阅读全文
摘要:题目大意 给定一个N*N的格子,每个格子里有一个非负数,要求你找出从左上角到右下角的一条路径,使得它满足路径上的格子里的数全部乘起来的积尾部0最少 题解 如果要产生0肯定是2*5得出来的,最终的乘积可以表示为2^x*5^y*C,那么零的个数就是min(x,y)。我们可以先对每个格子里的数预处理下,计算出2和5的个数来,然后DP分别求出2和5的最小个数然后选两者中的最小值,输出路径方法没啥说的,很传...
阅读全文
摘要:题目大意 给你一张宽为w,长为h的的贺卡,然后给你n个信封,每个信封宽为wi,长为hi,问你最多能在贺卡上嵌套多少个信封,如果某个信封i如果能够装在信封j里,当且仅当w[i]#include #include #include using namespace std;#define MAXN 5006int pre[MAXN],dp[MAXN];pair,int> a[MAXN];void...
阅读全文
摘要:题目大意 要求你对一个合法的括号序列进行染色,并且需要满足以下条件 1、要么不染色,要么染红色或者蓝色 2、对于任何一对括号,他们当中有且仅有一个被染色 3、相邻的括号不能染相同的颜色 题解 用区间dp[i][j][cl][cr]表示区间[i,j]被染色之后(第i个括号被染成cl色,第j个括号被染成cr色)的合法方案数 分为匹配和不匹配两种情况来处理,需要用到乘法原理,用记忆化比较好写~~~具体请...
阅读全文
摘要:题目大意 给定两个序列,要求你求出最长公共上升子序列 题解 LIS和LCS的合体,YY好久没YY出方程,看了网友的题解,主要是参考aikilis的,直接搬过来好了 经典的动态规划优化。 用opt[i][j]表示s[0..i-1]与t[0..j-1]的以t[j-1]结尾的最长上升公共子序列的长度,那么最后的答案是max{opt[n][j] | 1#include #include #include ...
阅读全文
摘要:题目大意 给定一个字符串s,q个查询,每次查询返回s[l…r]含有的回文子串个数(题目地址) 题解 和有一次多校的题目长得好相似,这个是回文子串个数,多校的是回文子序列个数 用dp[i][j]表示,s[i..j]含有的回文子串个数,则dp[i][j]=dp[i][j-1]+dp[i+1][j]-dp[i+1][j-1]+flag[i][j](如果s[i..j]是回文子串则flag[i][j]=1,...
阅读全文
摘要:题目大意 有一个长为L的街道可用来停车,司机在寻找停车位的时候,要求与后车的车距不少于b,与前车的距离不少于f。总共有两种操作,第一种操作是查询是否有可以停车的空位,如果有多个空位可以选择的话,选择最靠左的空位停车,并返回它的左端位置。第二种操作是让第x次操作的车从所占的车位开走。 题解 和POJ3677Hotel差不多,都是寻找连续的空位。不过要注意第一辆车是不需要考虑前方车距的,最后一辆车不需...
阅读全文