上一页 1 2 3 4 5 6 7 8 ··· 27 下一页
摘要: 这题是一道斯特林数:这里就是先从B选出n个数,再把n个数分成m堆(1~n),堆里面无序,堆有序;View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include<cstring>#include<vector>#include<string># 阅读全文
posted @ 2012-08-11 10:22 wutaoKeen 阅读(269) 评论(0) 推荐(0)
摘要: 这是一道组合数学题:首先由于%2的操作,我想到了f(n,m) = s(n,m)%2,假设一个f函数。于是s(n,m) = m * s(n-1,m)+ s(n-1,m-1) ==>f(n,m) = s(n-1,m-1) (m为偶数); f(n,m) = f(n-1,m) + f(n-1,m-1)=f(n-1,m)+f(n-2,m-2)(m为奇数,则m-1为偶数)。这样就可以将m给去掉,最后就是计算f(n,m)%2即可,必须想到怎么样得到f(n,m)。怎么得到呢?这一步是比较难想的。我用递推,推了很久都不行,因为n,m实在太大了。于是我想到了先画个图,希望通过图形来表示它们的递推关系,果真很 阅读全文
posted @ 2012-08-11 08:45 wutaoKeen 阅读(472) 评论(0) 推荐(1)
摘要: 这个题就是要你找在区间[l,r]之中有多到少个二进制数0的个数大于等于1的个数(没有前导0)我的解题思路是:先求出这个数有多少位n;然后进行组合排序:排序要分两种情况:第一种:就是位数小于n,我们假设要对m个数进行0与1的组合排序,那么m+1位一定是1;那么我们就只要举例到1~n-2位。第二种:就是n位,第一位我们不管一定为1,那么我们就列举后面出现1的情况,如果为1,那么我们就把该位设为0,假设该位为m,那么m前面已经有k个0,那么到m位就有k+1个0了;View Code #include<iostream>#include<cstdio>#include<c 阅读全文
posted @ 2012-08-10 11:06 wutaoKeen 阅读(143) 评论(0) 推荐(0)
摘要: 这是一个组合数学题:我就拿3124来做例子:我们要举出2的个数;我们是从地位向高位列举:当我们拿个位时,我们就把个位变成2,那么前面有多少个数,那么就有多少个2,前面有0~312共有313个数;我们在列举十位:2前面有0~30个数可取,个位就可以取0~10,所以共有31*10个,当前面是31时,2可以为0,1,2,3,共有4个数;总共有31*10 + 4;我们在列举百位:1前面可以去0~2共有3个数,这是百位可以取2,(总是比3124小)后面可以去任意的数前面可以取3*100个,当取3时,那么后面不要算了,总共为3*100,因为1小于2;有些人就会问一个为题就是2122是当取个位时有这个数,取 阅读全文
posted @ 2012-08-09 10:31 wutaoKeen 阅读(296) 评论(0) 推荐(0)
摘要: 题目Hexadecimal Numbers (hex)问题摘要解法1源程序hex.dpr解法核心枚举+组合数学特殊数据结构N/A复杂度O(Len*Digit), Here Digit = 16状态Accepted作题日期2006-6-3解法描述首先确定数字串的长度Len:从大到小枚举Len,每个Len下有15*P(15, Len-1)个数字串。每次用这个个数扣除输入的序数Count,直到序数Count将扣为负数时停止,就确定了长度Len。然后从高位到低位,从大到小确定每位数字:设当前确定的数字为第i位,则第i位的任何一个取值,都有P(16 - (Len - i + 1), i - 1)个数字串 阅读全文
posted @ 2012-08-08 20:40 wutaoKeen 阅读(269) 评论(0) 推荐(0)
摘要: 起首引用下leemars的呈报:这道题请求N!的最后一个非0数字是几许,若是用一般作法,先统计2和5的个数,然后补乘2,获得的将是TLE。所以还须要再做简化:为了把0去掉,我们把所有的因数2和5都提出来,放到最后再处理惩罚。N!中的N个相乘的数可以分成两堆:奇数和偶数。偶数相乘可以写成(2^M)*(M!),M=N DIV 2。M!可以递归处理惩罚,是以如今只需评论辩论奇数相乘。推敲1*3*5*7*9*11*13*15*17* ... *N(若是N为偶数则是N-1),这里面是5的倍数的有5,15,25,35,... ,可以此中的5提出来,变成(5^P)*(1*3*5*7*9* ... ),后面括 阅读全文
posted @ 2012-08-08 10:29 wutaoKeen 阅读(1729) 评论(0) 推荐(0)
摘要: 转载:http://blog.csdn.net/luojinping/article/details/75552931.如何求出n阶乘中质因数x(比如说5)出现的次数? int get(int m, int n)//计算n!中质因子m的出现次数{ if (n == 0) return 0; return (n / m) + get(m, n / m); } 解析:求n!中m出现的次数。那么n可以分解为即为求q的值。例如:假设n=10,m=3; n! = 1*2*3*4*5*6*7*8*9*10那么出现质因数3的次数为4次。有公式:[n/m]表示不大于n的数中m的倍数贡献一个m。[n/] 表示不 阅读全文
posted @ 2012-08-07 09:07 wutaoKeen 阅读(231) 评论(0) 推荐(0)
摘要: 这个题是组合题:View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include<cstring>#include<vector>#include<string>#define LL long longusing namespace std;v 阅读全文
posted @ 2012-08-06 16:50 wutaoKeen 阅读(126) 评论(0) 推荐(0)
摘要: 这个题是一个期望DP题:假设从a要走到d,a与b,c连通,b,c与d连通,那么从a到d的期望就是就是a到b的概率乘以b到d的期望,加上a到c的概率乘以c到d的期望,再加上花费;我们注意到这个题的bug是无穷的,那么从每个子程序找到bug的概率是1/s,而属于那种类型的是1/n;这里我们设dp[i][j]为找到从j种子程序中找到了i中类型;那麽dp[n][s]=0;代表已经到了目标;那么dp[i][j]与哪几种可能相连,有4种可能,dp[i][j],代表发现i中bug从j个子程序中找到的;dp[i+1][j],找到新的种类bug,从j个子程序;dp[i][j+1],i种类bug,从j+1个子程序 阅读全文
posted @ 2012-08-04 18:48 wutaoKeen 阅读(155) 评论(0) 推荐(0)
摘要: 本题题目大意在一个01方阵中找出四条边全都是1的正方形的个数,对于正方形内部则没有要求。一个直观的想法是首先用N^2的时间预处理出每一个是1的点向上下左右四个方向能够延伸的1的最大长度,记为四个数组l, r, u, d。然后我们观察到正方形有一个特征是同一对角线上的两个顶点在原方阵的同一条对角线上。于是我们可以想到枚举原来方阵的每条对角线,然后我们对于每条对角线枚举对角线上所有是1的点i,那么我们可以发现可能和i构成正方形的点应该在该对角线的 [i, i + min(r[i], d[i]) – 1] 闭区间内, 而在这个区间内的点 j 只要满足 j – i + 1 <= min(l[j] 阅读全文
posted @ 2012-08-03 20:19 wutaoKeen 阅读(346) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 7 8 ··· 27 下一页