08 2012 档案

摘要:这是一道简单求C(n,m)的题: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 namespa 阅读全文
posted @ 2012-08-17 11:38 wutaoKeen 阅读(190) 评论(0) 推荐(0)
摘要:这个题与poj1664一样的类型的题目,但是这题的数据量比较大,如果像1664那样做,就会超时,因为有很多重复的计算;View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include<cstring>#include<vector>#include< 阅读全文
posted @ 2012-08-15 21:48 wutaoKeen 阅读(174) 评论(0) 推荐(0)
摘要:这是一道简单的组合数学题,这里要用递推来做;方法一:A[n][m] 表示n个盘子放m个苹果的方法,那么A[n][m] = A[n-1][m] + A[n][m-n];就会等于m个苹果放在n-1个盘子的方法(也就是一个盘子为0)加上我们个盘子放一个再把剩下的放到n个盘子;因为每个盘子中加一个数1不会影响A[n][m-n]中的方案的可行性,也不会影响A的定义。View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath 阅读全文
posted @ 2012-08-15 20:20 wutaoKeen 阅读(165) 评论(0) 推荐(0)
摘要:题意:给你n*n的方格纸,在格子里填颜色,要满足任意水平、垂直翻转后看到的图形都一样;对于n*n的方格纸,则可填 (n/2+1)*(n/2)/2 种颜色,如图。我们就只要涂图中的那个三角形即可,由于是对称的那么其余的方格也就确定了颜色;有些方格已经填了颜色,对于已填色的方格,会固定对应格子的颜色,使得可填颜色数减1.注意多个已填色格本来就是同色格,不要多减因n范围比较大,不能直接开数组,我们就把所有的涂了颜色的方格的就过旋转之后来对应上面的三角形的方格,再去重就可以了,那么剩下了的方格,每个方格我们可以K种颜色;View Code #include<iostream>#includ 阅读全文
posted @ 2012-08-15 16:51 wutaoKeen 阅读(609) 评论(0) 推荐(0)
摘要:问题描述如下:一个具有n个元素的排列,经过k趟bubblesort排到有序状态。求出满足此条件的排列个数。首先,了解反序表的概念。《计算机程序设计艺术》第三卷5.1.1反序部分有说明。简述如下:a1,a2,...,an是集合{1,2,...,n}的一个排列。令bj为位于j左边但是大于j的元素个数,就能得到排列a1,a2,...,an的反序表b1,b2,...,b3。比如说:排列591826473有反序表位置:123456789b236402210不管什么样子的排列,只要可以比较大小,就可以映射到集合{1,2,...,n}上的一个排列。不难发现,每一趟bubblesort,都会将这一趟之前反序数 阅读全文
posted @ 2012-08-13 16:19 wutaoKeen 阅读(224) 评论(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;LL 阅读全文
posted @ 2012-08-13 10:40 wutaoKeen 阅读(125) 评论(0) 推荐(0)
摘要:这是一道对斯特林数的运用:s[n][k] = s[n-1][k-1] + k*[n-1][k];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-13 10:11 wutaoKeen 阅读(196) 评论(0) 推荐(0)
摘要:一道简单的组合数学题,我们把从1~m的和的余数相同的放在一个集合里面,那么他们任意一个相减就会是得到余数为0;那么也是d的倍数;这里要注意的是当余数为0的集合那么可以从中任意选2个与1个,这个题会超出int型:View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include< 阅读全文
posted @ 2012-08-13 09:09 wutaoKeen 阅读(198) 评论(0) 推荐(0)
摘要:给定一个数X.1=X0, X1, X2.....Xm= X 是X的因数求一串因数,要求Xi| Xi+1,即上一个因数能整除下一个因数,问这条串就的最长长度,和有多少条这样长度的串.X = p1^a1 * p2^a2 ... pn^anXi =p1^b2 * p2^b2 ...pk^bk... pn^bn,Xi+1 =p1^b2 * p2^b2 ...pk^(bk)... pn^bn,要使length最长,只要从1开始,每次只乘以X的一个质因数即可,即length = (a1+a2+...an)而方法数就是X的质因数的重排列数,way = (a1+a2+...an)!/(a1!a2!...an! 阅读全文
posted @ 2012-08-12 22:03 wutaoKeen 阅读(258) 评论(0) 推荐(0)
摘要:这是一个组合数学题:题意:就是给你n个点,任选3个点判断A=|x1y2 - y1x2 + x2y3 - y2x3 + x3y1 - y3x1|/2是否为整数(0也算),并计算这样的组合存在多少个;思路 A = y1*(x3-x2) + y2*(x1-x3) + y3*(x2-x1);只有A为偶数时才成立;那么只有两种情况成立:1 :奇 + 奇 + 偶 2 : 偶 + 偶 + 偶;那么我们就可以把点化成0,1的类型:即 (x,y)= (x&1,y&1);我么在找规律得:如果存在2中以上的类型相同,那么这种情况一定是偶数; View Code #include<iostrea 阅读全文
posted @ 2012-08-12 10:24 wutaoKeen 阅读(220) 评论(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 namespac 阅读全文
posted @ 2012-08-11 11:00 wutaoKeen 阅读(226) 评论(0) 推荐(0)
摘要:这题是一道斯特林数:这里就是先从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 阅读(298) 评论(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 阅读(1730) 评论(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 阅读(232) 评论(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 阅读(347) 评论(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 nam 阅读全文
posted @ 2012-08-01 22:50 wutaoKeen 阅读(420) 评论(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 na 阅读全文
posted @ 2012-08-01 20:48 wutaoKeen 阅读(207) 评论(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 阅读全文
posted @ 2012-08-01 16:12 wutaoKeen 阅读(231) 评论(0) 推荐(0)
摘要:二位线段树:View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<cstring>#include<vector>#include<string>#define LL long longusing namespace std;class Node{public: int 阅读全文
posted @ 2012-08-01 12:59 wutaoKeen 阅读(215) 评论(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 namespa 阅读全文
posted @ 2012-08-01 11:01 wutaoKeen 阅读(195) 评论(0) 推荐(0)