51nod
Sdywolf
沃是一只蒟蒻
展开
-
51nod 1277 字符串中的最大值【KMP算法】【next树】
Description一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd。 给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值。 例如:S = “abababa” 所有的前缀如下:“a”, 长度与出现次数的乘积 1 * 4 = 4, “ab”,长度与出现次数的乘积 2 * 3 = 6, “aba”, 长度与出现次数的原创 2017-08-03 18:09:15 · 488 阅读 · 0 评论 -
51nod 1120 机器人走方格V3【卡特兰数】【卢卡斯定理】
DescriptionN * N的方格,从左上到右下画一条线。一个机器人从左上走到右下,只能向右或向下走。并要求只能在这条线的上面或下面走,不能穿越这条线,有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10007的结果。题解答案就是H(N−1)∗2H(N-1)*2%tt。所以就是一个求大组合数模一个质数的题目,可以用卢卡斯定理 (xy)=(x mod py mod p)×⎛⎝⌊xp⌋原创 2017-11-08 16:33:00 · 381 阅读 · 0 评论 -
51nod 1781 Pinball【DP】【线段树】
DescriptionPinball的游戏界面由m+2行、n列组成。第一行在顶端。一个球会从第一行的某一列出发,开始垂直下落,界面上有一些漏斗,一共有m个漏斗分别放在第2~m+1行,第i个漏斗的作用是把经过第i+1行且列数在Ai~Bi之间的球,将其移到下一行的第Ci列。 使用第i个漏斗需要支付Di的价钱,你需要保留一些漏斗使得球无论从第一行的哪一列开始放,都只可能到达第m+2行的唯一 一列,求花费的原创 2017-11-08 20:49:49 · 353 阅读 · 0 评论 -
51nod 1672 区间交【线段树】【贪心】
Description小A有一个含有n个非负整数的数列与m个区间,每个区间可以表示为li,ri。它想选择其中k个区间, 使得这些区间的交的那些位置所对应的数的和最大。(是指k个区间共同的交,即每个区间都包含这一段,具体可以参照样例)在样例中,5个位置对应的值分别为1,2,3,4,6,那么选择[2,5]与[4,5]两个区间的区间交为[4,5],它的值的和为10。题解刚看到题目感觉很可以用扫描线做,后来原创 2017-10-23 21:08:50 · 422 阅读 · 0 评论 -
51nod 1383 整数分解为2的幂【递推】
Description任何正整数都能分解成2的幂,给定整数N,求N的此类划分方法的数量!由于方案数量较大,输出Mod 1000000007的结果。 比如N = 7时,共有6种划分方法。7=1+1+1+1+1+1+1 =1+1+1+1+1+2 =1+1+1+2+2 =1+2+2+2 =1+1+1+4 =1+2+4题解定义f[i]表示i的方案数,可以知道,每个数要么是从前原创 2017-10-24 07:55:19 · 279 阅读 · 0 评论 -
51nod 1122 机器人走方格 V4【组合数学】【矩阵乘法】
Description四个机器人a b c d,在2 * 2的方格里,一开始四个机器人分别站在4个格子上,每一步机器人可以往临近的一个格子移动或留在原地(同一个格子可以有多个机器人停留),经过n步后有多少种不同的走法,使得每个毯子上都有1机器人停留。由于方法数量巨大,输出 Mod 10^9 + 7的结果。题解每个位置都是等价的,可以通过求解从第一个位置到另外的位置的方案数,然后枚举最后每个机器人的位原创 2017-11-09 13:41:35 · 418 阅读 · 0 评论 -
51nod 1378 夹克老爷的愤怒【贪心】
Description夹克老爷逢三抽一之后,由于采用了新师爷的策略,乡民们叫苦不堪,开始组织起来暴力抗租。夹克老爷很愤怒,他决定派家丁常驻村中进行镇压。诺德县 有N个村庄,编号0 至 N-1,这些村庄之间用N - 1条道路连接起来。家丁都是经过系统训练的暴力机器,每名家丁可以被派驻在一个村庄,并镇压当前村庄以及距离该村庄不超过K段道路的村庄。夹克老爷一贯奉行最小成本最大利润的原则,请问要实现对全部村原创 2017-10-31 22:33:26 · 370 阅读 · 0 评论 -
51nod 1952 栈【单调队列】
DescriptionLYK有一个栈,众所周知的是这个数据结构的特性是后进先出的。LYK感觉这样子不太美妙,于是它决定在这个前提下将其改进,也就是说,每次插入元素时,可以在栈顶或者栈底插入,删除元素时,只能在栈顶删除。LYK想知道每次执行完操作后当前栈中元素的最大值是多少。第一行一个数n表示操作次数。接下来n行,每行两个数a。若a<=1,则接下来输入一个数b。若a=0,则在栈顶插入一个数b。若a=1原创 2017-11-09 19:24:24 · 320 阅读 · 0 评论 -
51nod 1494 选举拉票【贪心】【扫描线】【线段树】
Description现在你要竞选一个县的县长。你去对每一个选民进行了调查。你已经知道每一个人要选的人是谁,以及要花多少钱才能让这个人选你。现在你想要花最少的钱使得你当上县长。你当选的条件是你的票数比任何一个其它候选人的多(严格的多,不能和他们中最多的相等)。请计算一下最少要花多少钱。题解直接做很困难,所以我们想到了枚举我的选票数,所有选票数比我多的人的选票都要被我抢到小于我的选票数(一定是从小到大原创 2017-10-24 17:11:28 · 559 阅读 · 0 评论 -
51nod 1779 逆序对统计【状压DP】
Descriptionlyk最近计划按顺序做n道题目,每道题目都分为很多分数档次,lyk觉得这些题太简单了,于是它想到了一个好玩的游戏。lyk决定将每道题目做出其中的某个分数,使得这n道题目的逆序对个数最多。为了方便,假设共有m个分数档次,并且会给m个分数档次分配一个题目编号,表示该题目会出现这个分数档次。题目保证每道题都存在至少一个分数档次。(例如样例中5道题目的分数分别是5,6,3,4,7,共有原创 2017-11-01 15:50:36 · 466 阅读 · 0 评论 -
51nod 1486 大大走格子【组合数学】【DP】
Description有一个h行w列的棋盘,里面有一些格子是不能走的,现在要求从左上角走到右下角的方案数。题解考虑一个n∗mn*m的矩阵,从左上角走到右下角的方案数为Cn−1n+m−2C_{n+m-2}^{n-1}。发现直接求答案很难,运用补集思想,只要求出经过了障碍的方案书就可以了,定义f[i]f[i]表示排序后从左上角走到第i个障碍,如果从左上角走到i的路上没有其他的障碍的话,显然可以直接求,如原创 2017-10-24 19:54:47 · 641 阅读 · 0 评论 -
51nod 1627 瞬间移动【组合数学】
Description有一个无限大的矩形,初始时你在左上角(即第一行第一列),每次你都可以选择一个右下方格子,并瞬移过去(如从下图中的红色格子能直接瞬移到蓝色格子),求到第n行第m列的格子有几种方案,答案对1000000007取模。 题解枚举走的步数,直接搞。代码#include<cstdio>#include<cstring>#include<algorithm>#define tt 10原创 2017-10-25 10:16:40 · 466 阅读 · 0 评论 -
51nod 1461 稳定桌【扫描线】【线段树】
Description有一张桌子,有n个腿。第i根腿的长度是li。现在要拿掉一些腿,使得桌子稳定,拿掉第i根腿需要di的能量。稳定的条件是,假如拿掉若干条腿之后,桌子还有k个腿,那么长度最长的腿的数目要超过一半。比如桌子有5根腿,那么至少要有三根腿是最长的。另外,只有一根腿的桌子是稳定的,两个腿的桌子想要稳定,必需长度是一样的。你的任务是拿掉若干腿,使得桌子稳定,并且所消耗的能量要最少。题解可以枚举原创 2017-10-25 15:06:07 · 418 阅读 · 0 评论 -
51nod 1500 苹果曼和树【树形DP】
Description苹果曼有一棵n个点的树。有一些(至少一个)结点被标记为黑色,有一些结点被标记为白色。现在考虑一个包含k(0 ≤ k < n)条树边的集合。如果苹果曼删除这些边,那么会将这个树分成(k+1)个部分。每个部分还是一棵树。现在苹果曼想知道有多少种边的集合,可以使得删除之后每一个部分恰好包含一个黑色结点。答案对1000000007 取余即可。题解定义f[i][0/1]f[i][0/1]原创 2017-10-26 16:05:46 · 478 阅读 · 0 评论 -
51nod 1398 等公交【概率DP】
Description小镇的公交车站里有N辆公交,标号为0,1,2,…,N-1。这个小镇的公交运作模式比较奇葩,当必须有一辆车离开车站时,系统会随机从N辆车中选择一辆车,其中任意一辆车i被选中的概率为prob[i]/100,当车i被选中后它会离开车站,并且在之后的time[i]的时间内完成它的行程并返回车站。然后系统又开始随机选N辆车之一(存在同一辆车被连续多次选中的可能)。这个车站在0时刻发出第一原创 2017-11-04 17:47:26 · 352 阅读 · 0 评论 -
【康复训练】【51nod】1711 平均数
DescriptionLYK有一个长度为n的序列a。 他最近在研究平均数。 他甚至想知道所有区间的平均数,但是区间数目实在太多了。 为了方便起见,你只要告诉他所有区间(n*(n+1)/2个区间)中第k大的平均数就行了。题解二分,树状数组。代码#include<cstdio>#include<cstring>#include<algor...原创 2018-05-17 20:18:21 · 378 阅读 · 1 评论 -
【康复训练】【51nod】1463 找朋友
Description给定: 两个长度为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]互不相等 I...原创 2018-05-18 15:16:55 · 231 阅读 · 0 评论 -
51nod 1503 猪和回文【DP】
Description一只猪走进了一个森林。很凑巧的是,这个森林的形状是长方形的,有n行,m列组成。我们把这个长方形的行从上到下标记为1到n,列从左到右标记为1到m。处于第r行第c列的格子用(r,c)表示。刚开始的时候猪站在(1,1),他的目标是走到(n,m)。由于猪回家心切,他在(r,c)的时候,只会往(r+1,c)或(r,c+1)走。他不能走出这个森林。这只猪所在的森林是一个非同寻常的森林。有一原创 2017-10-31 07:44:43 · 399 阅读 · 0 评论 -
51nod 1476 括号序列的最小代价【贪心】【堆】
Description这里有一个关于合法的括号序列的问题。如果插入“+”和“1”到一个括号序列,我们能得到一个正确的数学表达式,我们就认为这个括号序列是合法的。例如,序列”(())()”, “()”和”(()(()))”是合法的,但是”)(“, “(()”和”(()))(“是不合法的。我们这有一种仅由“(”,“)”和“?”组成的括号序列,你必须将“?”替换成括号,从而得到一个合法的括号序列。对于每个原创 2017-10-23 07:37:52 · 474 阅读 · 0 评论 -
51nod 1385 凑数字【贪心】
Description给定一个n,要求找出一个最短的字符串S,使得所有1到n的整数都是S的子序列。 比如n=10,那么S=”1234056789”的时候,是满足条件的。这个时候S的长度是10。现在给出一个n,要求输出最短S的长度。题解可以发现,如果是整10的数,那么每一位上都要有0~9,但是,可能会有零头,可以发现,如果这个数等于11111….(每一位都相同),那么最后一位要加一个1,类似的,如果原创 2017-10-22 19:22:35 · 379 阅读 · 0 评论 -
51nod1241[特殊的排序]【贪心】
Description一个数组的元素为1至N的整数,现在要对这个数组进行排序,在排序时只能将元素放在数组的头部或尾部,问至少需要移动多少个数字,才能完成整个排序过程?例如:2 5 3 4 1 将1移到头部 => 1 2 5 3 4 将5移到尾部 =>1 2 3 4 5 这样就排好了,移动了2个元素。给出一个1-N的排列,输出完成排序所需的最少移动次数。题解最坏的情况需要移动几次?每个位置最多移动一次原创 2017-08-27 20:30:24 · 555 阅读 · 0 评论 -
51nod 1125[交换机器的最小代价]【贪心】
Description有N台机器重量各不相等,现在要求把这些机器按照重量排序,重量从左到右依次递增。移动机器只能做交换操作,但交换机器要花费一定的费用,费用的大小就是交换机器重量的和。例如:3 2 1,交换1 3后为递增排序,总的交换代价为4。给出N台机器的重量,求将所有机器变为有序的最小代价。(机器的重量均为正整数)题解首先,会发现,如果我每次交换都保证某一个机器到了它最终的位置,那么我最终最多交原创 2017-08-29 20:32:45 · 404 阅读 · 0 评论 -
51nod 1020 逆序排列【DP】
Description在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。 如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序数是4。1-n的全排列中,逆序数最小为0(正序),最大为n*(n-1) / 2(倒序) 给出2个数n和k,求1-n的全排列中,逆序数为k的排列有多少种? 例如:n =原创 2017-09-10 16:50:27 · 462 阅读 · 0 评论 -
51nod 1350 斐波那契表示【斐波那契数列】
Description每一个正整数都可以表示为若干个斐波那契数的和,一个整数可能存在多种不同的表示方法,例如:14 = 13 + 1 = 8 + 5 + 1,其中13 + 1是最短的表示(只用了2个斐波那契数)。定义F(n) = n的最短表示中的数字个数,F(14) = 2,F(100) = 3(100 = 3 + 8 + 89),F(16) = 2(16 = 8 + 8 = 13 + 3)。定义G原创 2017-09-20 21:00:25 · 737 阅读 · 0 评论 -
51nod 1423 最大“二货”【单调栈】
Description白克喜欢找一个序列中的次大值。对于一个所有数字都不同的序列 x1, x2, …, xk (k > 1) ,他的次大值是最大的 xj ,并且满足 xj ≠maxki=1 xi 对于一个所有数字都不同的序列 x1, x2, …, xk (k > 1) ,他的幸运数字是最大值和次大值的异或值(Xor)。现在有一个序列 s1, s2, …, sn (n > 1) 。 s[l,r] 表原创 2017-10-27 20:16:06 · 281 阅读 · 0 评论 -
51nod 1495 中国好区间【2-pointers】
Description阿尔法在玩一个游戏,阿尔法给出了一个长度为n的序列,他认为,一段好的区间,它的长度是>=k的,且该区间的第k大的那个数,一定大于等于T。那么问题来了,阿尔法想知道有多少好的区间。由于阿尔法的序列长度实在是太大了,无法在规定时间内读入。他想了一个绝妙的方法。读入a[0],b,c,p,则a[i]=(a[i-1]*b+c)mod p。样例解释:a1~a5分别为47,135,247,3原创 2017-10-28 07:55:02 · 301 阅读 · 0 评论 -
51nod 1349 最大值【单调栈】
Description有一天,小a给了小b一些数字,让小b帮忙找到其中最大的数,由于小b是一个程序猿,当然写了一个代码很快的解决了这个问题。这时,邪恶的小c又出现了,他问小b,假如我只需要知道这些数字中的某个区间的最大值,你还能做嘛?小b经过七七四十九天的思考,终于完美的解决了这道题目,这次,他想也让小c尝尝苦头,于是他问小c,我现在想知道存在多少不同的区间的最大值大于等于k,你还能做吗?这次,小c原创 2017-10-28 16:50:22 · 411 阅读 · 0 评论 -
51nod 算法马拉松30 A.函数【容斥】【组合数学】
Description想知道f:A->B这个函数(其中|A|=n, |B|=m)的所有映射关系要使B的每个元素都要被A的一个元素覆盖到。数字可能很大你只要输出方案数模1,000,000,007即可。题解枚举有在B中有几个元素一定被映射到了,假设B中有ii个元素一定被映射到了,那么方案就是Cim∗(m−i)nC_m^i*(m-i)^n,考虑容斥来统计答案,所以答案就是∑mi=0Cin∗(m−i)n∗(原创 2017-10-28 20:02:31 · 415 阅读 · 0 评论 -
51nod 1354 选数字【DP】
Description当给定一个序列a[0],a[1],a[2],…,a[n-1] 和一个整数K时,我们想找出,有多少子序列满足这么一个条件:把当前子序列里面的所有元素乘起来恰好等于K。对于第一个数据,我们可以选择[3]或者[1(第一个1), 3]或者[1(第二个1), 3]或者[1,1,3]。所以答案是4。题解可以发现,m的因数个数很少,所以可以定义f[i][j]f[i][j]表示前ii个数,乘起原创 2017-10-28 21:19:29 · 298 阅读 · 0 评论 -
51nod 1437 迈克步【单调栈】
Description有n只熊。他们站成一排队伍,从左到右依次1到n编号。第i只熊的高度是ai。一组熊指的队伍中连续的一个子段。组的大小就是熊的数目。而组的力量就是这一组熊中最小的高度。迈克想知道对于所有的组大小为x(1 ≤ x ≤ n)的,最大力量是多少。题解控制区间的idea。只要单调栈刷出每个点的控制区间,然后从后往前更新一下答案就可以了。代码#include<cstdio>#include原创 2017-10-29 07:42:49 · 380 阅读 · 0 评论 -
51nod 1288 汽油补给【贪心】【ST表】【单调栈】
Description有(N+1)个城市,0是起点N是终点,开车从0 -> 1 - > 2…… -> N,车每走1个单位距离消耗1个单位的汽油,油箱的容量是T。给出每个城市到下一个城市的距离D,以及当地的油价P,求走完整个旅途最少的花费。如果无法从起点到达终点输出-1。例如D = {10, 9, 8}, P = {2, 1, 3},T = 15,最小花费为41,在0加上10个单位的汽油,在1加满15原创 2017-10-21 19:39:12 · 316 阅读 · 0 评论 -
51nod 1274 最长递增路径【DP】
Description一个无向图,可能有自环,有重边,每条边有一个边权。你可以从任何点出发,任何点结束,可以经过同一个点任意次。但是不能经过同一条边2次,并且你走过的路必须满足所有边的权值严格单调递增,求最长能经过多少条边。以此图为例,最长的路径是:3 -> 1 -> 2 -> 3 -> 2 或3 -> 1 -> 2 -> 3 -> 4 长度为4。题解由于要求严格递增,所以直接按照边权排序刷DP就可原创 2017-10-21 23:31:42 · 316 阅读 · 0 评论 -
51nod 1743雪之国度【最小生成树】【LCA】【并查集】
Description雪之国度有N座城市,依次编号为1到N,又有M条道路连接了其中的城市,每一条道路都连接了不同的2个城市,任何两座不同的城市之间可能不止一条道路。 雪之女王赋予了每一座城市不同的能量,其中第i座城市被赋予的能量为Wi。 如果城市u和v之间有一条道路,那么只要此刻雪之女王的能量不小于|Wu-Wv|,这条道路就是安全的。 如果城市u和v之间存在两条没有重复道路的安全路径(其中每一原创 2017-11-07 21:11:51 · 403 阅读 · 0 评论 -
51nod 最大M子段和V2【贪心】【链表】【堆】
Description个整数组成的序列a[1],a[2],a[3],…,a[n],将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的。如果M >= N个数中正数的个数,那么输出所有正数的和。例如:-2 11 -4 13 -5 6 -2,分为2段,11 -4 13一段,6一段,和为26。题解考虑贪心。我肯定是尽量把所有正数都取来,但是,这样有可能段数超过了M,所以我们要采取一些方案来减少段原创 2017-10-30 16:22:56 · 374 阅读 · 0 评论 -
51nod 1052[最大子段和]【DP】
DescriptionN个整数组成的序列a[1],a[2],a[3],…,a[n],将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的。如果M >= N个数中正数的个数,那么输出所有正数的和。例如:-2 11 -4 13 -5 6 -2,分为2段,11 -4 13一段,6一段,和为26。题解首先,题目的意思有点绕,这里的答案其实是可以选1..m1..m个子段的最优解。那么,我们定义f[i原创 2017-08-29 21:43:28 · 292 阅读 · 0 评论 -
51nod 1681 公共祖先【树状数组】【DFS序】
Description有一个庞大的家族,共n人。已知这n个人的祖辈关系正好形成树形结构(即父亲向儿子连边)。在另一个未知的平行宇宙,这n人的祖辈关系仍然是树形结构,但他们相互之间的关系却完全不同了,原来的祖先可能变成了后代,后代变成的同辈……两个人的亲密度定义为在这两个平行宇宙有多少人一直是他们的公共祖先。整个家族的亲密度定义为任意两个人亲密度的总和。题解首先要转化一下,求任意两人的亲密度的总和就相原创 2017-10-30 20:06:37 · 331 阅读 · 0 评论 -
【康复训练】【主席树】【51nod】1175 区间中第K大的数
Description一个长度为N的整数序列,编号0 - N - 1。进行Q次查询,查询编号i至j的所有数中,第K大的数是多少。 例如: 1 7 6 3 1。i = 1, j = 3,k = 2,对应的数为7 6 3,第2大的数为6。题解主席树代码#include&lt;cstdio&gt;#include&lt;cstring&gt;#include&lt;al...原创 2018-05-26 15:09:09 · 256 阅读 · 0 评论