51Nod
Marcus-Bao
这个作者很懒,什么都没留下…
展开
-
51Nod - 1103 N的倍数 抽屉定理
题目链接思路:这个题是一个抽屉定理的典型应用.当看到n个数模n的时候,还要确定某种关系,就可以试试抽屉定理.抽屉原理的一种更一般的表述为: “把多于kn个东西任意分放进n个空抽屉(k是正整数),那么一定有一个抽屉中放进了至少k+1个东西。” 对于这个题目,首先很简单的是我们知道:如果有几个数加起来%n==0,那么这几个数的和就一定是N原创 2017-07-13 22:25:52 · 388 阅读 · 0 评论 -
51Nod - 1453 抽彩球 逆推+排列组合
题目链接思路:这个题目中有一个限制,那就是最后一个球总是在编号比他大的球拿完之前拿完.如果我们正常的从前往后做的话,会发现有很多的限制,根本不可能考虑全面. 所以对于这种存在前后关系的题目我们都尽可能的去想逆推,去看看逆推可不可以有结果. 对于最后一种颜色k,我们只需要将它的num[i]个球中拿出一个放在最后就可以了,这样就保原创 2017-07-17 19:32:34 · 454 阅读 · 0 评论 -
51Nod - 1158 全是1的最大子矩阵 单调栈
题目链接给出1个M*N的矩阵M1,里面的元素只有0或1,找出M1的一个子矩阵M2,M2中的元素只有1,并且M2的面积是最大的。输出M2的面积。Input第1行:2个数m,n中间用空格分隔(2 第2 - N + 1行:每行m个数,中间用空格分隔,均为0或1。Output输出最大全是1的子矩阵的面积。Sample Input3 31 1 01 1原创 2017-07-18 22:42:03 · 1173 阅读 · 0 评论 -
51Nod - 1215 数组的宽度 思维+单调栈
题目链接题意:N个整数组成的数组,定义子数组aii..ajj的宽度为:max(aii..ajj) - min(aii..ajj),求所有子数组的宽度和。思路:对于这个题目只需要跑一次递增的单调栈,跑一次递减的就可以了.分别记录以该点为最小值可以到达的左右区间,和为最大值可以到达的左右区间. 因为可原创 2017-07-18 22:57:36 · 516 阅读 · 0 评论 -
广工oj 1231 && 51nod 1821 加强版 思维+并查集 OR 栈
题目链接 这个应该是最基础的一道题目了.假设当时我们可以凑出(0,n)的所有数,那么只有当来的数x满足 n+1 >= x 才能保证凑出新的(0,n+x)的所有的数.否则若x为n+2 那么就无法凑出n+1 等等.所以这个题目直接排个序,然后扫一遍 直到 ans+1 int a[N];int main(){ int _,n;原创 2017-08-18 12:41:22 · 841 阅读 · 0 评论 -
51Nod 1277 字符串中的最大值 KMP next数组经典应用
题目链接一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd。给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值。例如:S = "abababa" 所有的前缀如下:"a", 长度与出现次数的乘积 1 * 4 = 4,"ab",长度与出现次数的乘积 2 * 3 = 6,"aba", 长度与出原创 2017-08-21 20:20:59 · 360 阅读 · 0 评论 -
51Nod - 1675 序列变换 mobius反演
题意: lyk有两序列a和b。 lyk想知道存在多少对x,y,满足以下两个条件。 1:gcd(x,y)=1。 2: abx=bay a_{b_x} = b_{a_y} 。例如若a={1,1,1},b={1,1,1}。那么存在7对,因为除了x=2,y=2或x=3,y=3外都满足条件。 Input 第一行一个数n(1<=n<=100000)。 接下来一行n个数,表示ai(1<=a原创 2017-10-14 12:03:20 · 572 阅读 · 0 评论 -
51nod 1407 与与与与 dp+容斥
题意:有n个整数,问从他们中取出若干个数字相与之后结果是0的有多少组。 答案比较大,输出对于 1,000,000,007 (1e9+7)取模后的结果。思路:我们首先从反面考虑,n个数所有组合情况为2n−1 2 ^ n - 1 ,然后在减掉相与不为0的情况即可.现在考虑不为0的方法数怎么求? 设dp[i]表示和 a[x] & i == i的方法数.那么我们可以知道,对于所有和 i相与还为i的数,任原创 2017-10-24 23:58:46 · 296 阅读 · 0 评论