![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
51nod
EMber _
人但有追求,世界亦会让路。
展开
-
51nod 1277 字符串中的最大值 kmp法
复健中…题目重点在求出现的次数,这个可以用SA,SAM求,讨论区有SA的解法。相对而言kmp较为简便,只要理解kmp中next数组的定义,就能轻松解决,倒着操作累计叠加即可。需要注意的是边界问题,由于未被赋值的next数组默认为0,所以如果计数的数组从0开始就会累加过多,所以将1作为初始位置,也因此做kmp的时候记得往后多做一位。不过就算位置错了也只有三个点不过。。#include<cstdio>#include<cstring>#include<algorithm原创 2020-09-02 14:55:36 · 221 阅读 · 0 评论 -
51nod1295 XOR KEY
给出一个长度为N的正整数数组A,再给出Q个查询,每个查询包括3个数,L, R, X (L <= R)。求A[L] 至 A[R] 这R - L + 1个数中,与X 进行异或运算(Xor),得到的最大值是多少? Input 第1行:2个数N, Q中间用空格分隔,分别表示数组的长度及查询的数量(1 <= N <= 50000, 1 <= Q <= 50000)。 第2 - N+1行:每行1个数,对应原创 2017-03-02 15:46:29 · 331 阅读 · 0 评论 -
bzoj1634
分析:经典套路,直接用t/d排序以后直接统计答案就好。#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace std;typedef long long原创 2017-03-08 22:43:13 · 266 阅读 · 0 评论 -
51nod 1086
分析:瞎玩,直接裸多重背包,虽然多重背包有O(nm)的做法,但是懒得打。。#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespa原创 2017-03-29 09:23:55 · 236 阅读 · 0 评论 -
51nod 1705七星剑 期望dp
分析:一开始觉得可以正推,但是怎么都是WA。。不得已看正解,???高斯消元???,我当时就觉得肯定可以线性做,然后真让我找到了。。http://www.cnblogs.com/candy99/p/6518826.html f[i]表示有i颗星的期望花费 f[i]=minf[i−1]+cj+(1−pi,j)∗(f[i]−f[gi,j]) 这个dp比较显然了,直接做,时间复杂度n*7.#inclu原创 2017-04-15 22:26:38 · 532 阅读 · 0 评论 -
51nod 1859 Clarke and number 打表
打表找规律,随便找找就有了,实在不行看题解,写的很清楚 sqrt出现了误差,判断一下就就好了。#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)us原创 2017-08-04 20:28:17 · 312 阅读 · 0 评论 -
51nod 排列与交换 序列dp
算是比较简单的七级题了吧,也是经典的序列交换类型的dp。 明显有f[i][j]表示前i个交换j次的方案数。 对于第一问,每次转移的时候直接把之前的方案继承过来。 最后统计答案的时候,只要交换次数与k的奇偶性相同,就可累加到答案内,因为剩余的步数我可以两点之间xjb交换。。 但是会算重,因为我这样的计算是尽量把每个数往前面交换,那这样最后他从i到1又转回i,方案就会算重,所以我们把这种情况减去原创 2017-08-15 21:57:24 · 228 阅读 · 0 评论 -
51nod 1601 完全图的最小生成树计数 Trie+kruskal
题意:给定一个长度为n的数组a[1..n],有一幅完全图,满足(u,v)的边权为a[u] xor a[v] 求边权和最小的生成树,你需要输出边权和还有方案数对1e9+7取模的值。由于边权是xor得到,容易想到用trie统计。。 按照当前最高位0/1将当前区间内的点分成两个部分s/t,那么答案肯定是s的最小生成树+t的最小生成树+s-t的最小边,s-t最小边用trie统计,最小生成树递归处理。原创 2017-09-08 21:31:36 · 1617 阅读 · 0 评论 -
51nod 1371 填数字 DP
题意:有n行格子,第i(1<=i<=n)行有i个格子,每行格子是左对齐。现在要在每一个格子填入一个非负整数,最后使得每一行每一列的和都不超过2。 请计算有多少种方案,答案比较大,请输出对100,000,007(1e8+7)取余后的结果。这题跟bzoj1801很像,基本上就是一道题了,但是注意这个地方可以一次放2,但是那题不行,所以我们还要改一下。 设f[i][j][k]表示做到了第i行,和为1的原创 2017-10-27 07:20:08 · 206 阅读 · 0 评论 -
51nod1232 完美数 数位DP
如果一个数能够被组成它的各个非0数字整除,则称它是完美数。例如:1-9都是完美数,10,11,12,101都是完美数,但是13就不是完美数(因为13不能被数字3整除)。 现在给定正整数x,y,求x和y之间(包含x和y的闭区间)共有多少完美数。一个数能整除他的所有位上的数,也就是说要整除所有位置上的数字的lcm。 那么设f[i][j][k]表示做到第i位,模2520意义下数字为j,lcm为第k个的原创 2017-11-10 10:21:18 · 637 阅读 · 0 评论 -
51nod 1299 监狱逃离 树形dp/最小割
题意:监狱有N条道路连接N + 1个交点,编号0至N,整个监狱被这些道路连在一起(任何2点之间都有道路),人们通过道路在交点之间走来走去。其中的一些交点只有一条路连接,这些点是监狱的出口。在各个交点中有M个点住着犯人(M <= N + 1),剩下的点可以安排警卫,有警卫把守的地方犯人无法通过。给出整个监狱的道路情况,以及犯人所在的位置,问至少需要安排多少个警卫,才能保证没有1个犯人能够逃到出口,如果原创 2017-10-26 08:26:38 · 258 阅读 · 0 评论 -
51nod 1500 苹果曼和树 树形DP
题意:给你一棵树,每个点只有黑色或者白色两种颜色,要求通过切割边把树分成k个树使得每个树内只有一个黑色点。 原谅我菜,没有第一时间想到转移方程。弱的跟鬼一样了。 设f[i][0/1]f[i][0/1]表示以i为根的块内部有一个或者0个黑色点,注意这里的块是未来最终分割而成的块,而不是现在的子树。 那么我们就可以转移了,初始化状态为f[x][bz[x]]=1。 对于一个状态为1的点x,他既可以原创 2017-10-26 21:54:35 · 331 阅读 · 0 评论 -
51nod 1378 夹克老爷的愤怒
1378 夹克老爷的愤怒 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 夹克老爷逢三抽一之后,由于采用了新师爷的策略,乡民们叫苦不堪,开始组织起来暴力抗租。 夹克老爷很愤怒,他决定派家丁常驻村中进行镇压。 诺德县 有N个村庄,编号0 至 N-1,这些村庄之间用N - 1条道路连接起来。 家丁都是经过系统训练的暴力机器,每名家丁可以被派驻在原创 2017-02-11 10:54:35 · 370 阅读 · 0 评论 -
51nod 1257 背包问题V3
这题目比较简单了,直接二分价值做,比较无脑,但是c++的比较好像有点问题,我直接比较才行,如果是带个变量进去就会炸,莫名其妙。#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i原创 2017-02-18 10:42:47 · 296 阅读 · 0 评论 -
51nod 1681 公共祖先 主席树dfs序
有一个庞大的家族,共n人。已知这n个人的祖辈关系正好形成树形结构(即父亲向儿子连边)。 在另一个未知的平行宇宙,这n人的祖辈关系仍然是树形结构,但他们相互之间的关系却完全不同了,原来的祖先可能变成了后代,后代变成的同辈…… 两个人的亲密度定义为在这两个平行宇宙有多少人一直是他们的公共祖先。 整个家族的亲密度定义为任意两个人亲密度的总和。 Input 第一行一个数n(1<=n<=100000原创 2017-02-27 22:27:38 · 254 阅读 · 0 评论 -
51nod 基础题小结
51nod的基础题除了部分几乎全部刷完了,感觉虽然是基础题但是还是有很多很好的模板题。 推荐的题目: P1057(fft) P1058斯特林近似 P1066,1069,1072,1073,1185博弈论 P1079CRT P1089MANACHER P1106其实你可用MILLER-RABIN P1135,1183,1240 其实都不难但是会对以后的学习有所帮助,就比如说P1240原创 2016-10-10 22:27:52 · 295 阅读 · 0 评论 -
51nod 1201
题意:给你一个整数n(n<=50000),n可以划分为多个整数相加的和,现在要求总方案,但是组成n的整数不能相同。题解:这题目比较锻炼思维,我一开始n<=50000还以为是O(n)…思维太狭窄了。。因为要求每个整数都不相同。所以我们假设最多需要多少整数,即:1+2+3+…+x 假设n为最大50000,那么x最多也就350左右的样子((1+350)*350/2>50000)所以我们只要找350个左右原创 2016-10-21 20:11:21 · 261 阅读 · 0 评论 -
51nod 四级算法 4/74 P1051 最大子矩阵
题意我就不说了,看题面吧。 思想还是很简单的枚举左右然后就变成了最大子序列的和,O(n^3)。 我只想说:注意n m顺序顺。。。。。序uses math;var p,n,m,l,r,len:int64; i,j,k:longint; x,ans,y:int64; f:array[0..500,0..500]of int64;原创 2016-09-26 22:06:03 · 334 阅读 · 0 评论 -
51nod 1254最大子段和V2
题意:让你能随意有一次机会交换任意两个数,然后求最大子段和。 题解:我们可以把这个题意变形一下:假设x只能和他前面的数交换,求最大子段和。变形以后就可以正反各做一遍然后统计答案就可以了。具体变形之后的O(N)DP怎么做请看佐理慧大神的题解https://www.51nod.com/question/index.html#!questionId=1078 我只能说我智商低下。。没有把max数组分左原创 2016-09-27 16:44:36 · 767 阅读 · 0 评论 -
51nod 1105 第K大的数
题意就不说了。。我真是菜哭了,四级都不能随手切,,感觉NOIP药丸。。。 一眼二分,但是怎么判断一直没有想到、、后来看了别人的题解才知道tmd原来是log方的,亏我一直在想log的,,,其实看看数据范围就知道是可以log方。。。判断就是直接判断,,,先把a和b排序,然后确定当前二分的数所在的范围(即是由a中的哪个数组成的),然后再二分b中匹配的位置,然后每次用n减去,就是小于当前二分数的数字的数量原创 2016-11-07 21:09:57 · 380 阅读 · 0 评论 -
51nod算法马拉松19 B 最小集合
题目链接:http://www.51nod.com/contest/problem.html#!problemId=1616 题解:该怎么做这题呢。。我比赛时候想了半天,问了舍友才知道,抱大腿QAQ。 设f[i]表示i有多少个倍数在集合内,设我们当前枚举的数是X,如果b[x]=b[kx](k>1)则x肯定不是任意两个数的最大公因数。时间复杂度不会算。。。。。#include<cstdio>co原创 2016-10-31 20:51:54 · 235 阅读 · 0 评论 -
51nod 1277 1292字符串的最大值系列
有一个字符串T。字符串S的F函数值可以如下计算:F(S) = L * S在T中出现的次数(L为字符串S的长度)。求所有T的子串S中,函数F(S)的最大值。 Input 输入字符串T, (1 <= L <= 1000000, L为T的长度),T中的所有字符均为小写英文字母。 Output 输出T的所有子串中长度与出现次数的乘积的最大值。 Input示例 aaaaaa Output示例原创 2016-12-14 20:09:30 · 290 阅读 · 0 评论 -
51nod 1463找朋友
给定: 两个长度为n的数列A 、B 一个有m个元素的集合K 询问Q次 每次询问[l,r],输出区间内满足|Bi-Bj|∈K 的最大Ai+Aj数据约定: n,Q<=100000 m <= 10 0<=A[i]<=1000000000 1<=B[i]<=n 1<=K[i]<=n 保证B[i]互不相等 Input n Q m A1 A2 ….An B1 B2 ….Bn K1原创 2016-12-23 22:06:55 · 321 阅读 · 0 评论 -
51nod 1120 Lucas定理
题目就不说了 这题是一个经典的卢卡斯定理的运用,从左上走到右下,维护只能走下或上,其实就是类似V2V1,但是不能经过对角线,即障碍物,那么组合数乱搞就可以了,然而摸数太小,于是我们用lucas定理。 原理:C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p; 递归算就可以了,注意求逆元,线性或者exgcd都可以。const mo=10007;var i,j,k,p,m:原创 2017-01-15 21:10:19 · 368 阅读 · 0 评论 -
51nod 欢乐手速场C 开心的小Q
开心的小Q tangjz (命题人)quailty (测试) 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个数字存在一个约数是完全平方数,那么小Q就认为这个数是有趣的。 小Q喜欢收集有趣的数字,每找到一个有趣的数,小Q就会变得很开心。 小Q发现12是有趣的,18也是有趣的,它们都是36的约数,而在36的约数中,还有3个数是有趣的,它们是4、9、36。 小Q很好原创 2017-02-07 16:29:40 · 1246 阅读 · 0 评论 -
51nod 1239欧拉函数之和
题意:求1-n的欧拉函数前缀和,n<=10^10; 这题要有一定数学基础。。 推导过程可以看tangjz(%神犇)的博文,http://blog.csdn.net/skywalkert/article/details/50500009 这里就不赘述了,毕竟挺简单的。 问题是求出来了式子以后怎么做。 n/i>根号n的取值只有根号n个,小于的也是,那么我们可以预处理根号n以内的,根号n以上的递原创 2017-02-16 15:14:51 · 345 阅读 · 0 评论 -
51nod 1485字母排序
这题目的原题是CF 558E但是加强了。 问题非常简单,给定一个长度为n的字符串S,有q个操作,每次操作的形式为 i j k,表示对从i到j的这一段子串进行排序,如果k=1进行非降序排序,否则进行非升序排序。 输出最后的字符串。 样例解释:Input 单组测试数据。 第一行有两个整数n, q (1 ≤ n ≤ 10^5, 0 ≤ q ≤ 50 000),表示字符串的长度和操作次数。原创 2016-08-13 21:24:30 · 893 阅读 · 4 评论