数论
文章平均质量分 65
EzCUfST
这个作者很懒,什么都没留下…
展开
-
母函数及其应用
转自http://blog.csdn.net/ydykl/article/details/6655142 网上找的一篇讲组合数学的文章,讲的很不错 先来说一说母函数,今天是第一次学。杭电关于母函数的PPT感觉不错,挺适合入门看看的。 什么是母函数?对于序列a0,a1,a2,…构造一函数:G(x)=a0+a1*x+a2*x^2+...G(x)就是序列a0,a转载 2015-07-28 15:59:13 · 2380 阅读 · 0 评论 -
hdu 1027 康托展开求全排列
{1,2,3,4,...,n}表示1,2,3,...,n的排列如 {1,2,3} 按从小到大排列一共6个。123 132 213 231 312 321 。 代表的数字 1 2 3 4 5 6 也就是把10进制数与一个排列对应起来。 他们间的对应关系可由康托展开来找到。 如我想知道321是{1,2,3}中第几个小的数可以这样考虑 : 第一位是3,当第一位的数小于3时,那排列原创 2015-07-28 15:13:11 · 587 阅读 · 0 评论 -
hdu 1029 Ignatius and the Princess IV
这倒题挺简单的,容易想到的一个办法是直接排序做,但是网上有一种更加巧妙的做法: 由于所求的数的个数大于等于(n+1)/2,所以所求数出现的次数减去其他数出现的次数的差大于等于1.我们先假设读入的第一个数是所求数,它出现的次数是1,然后依次读入数据,每当读入数据和当前数相同时,出现的次数加一否则减一,当出现的次数减为0的时候,这个数就一定不可能是所求的数,此时,将当前的数作为所求数进行原创 2015-07-29 15:13:58 · 303 阅读 · 0 评论 -
hdu 1028 母函数
这道题比较简单,可以说是母函数的模板题,直接套用模板就可以解了。 #include #include using namespace std; int n; int main() { while (scanf("%d",&n)!=EOF) { int c1[150],c2[150]; for (int i=0;i<=n;i++)原创 2015-07-29 09:03:51 · 490 阅读 · 0 评论 -
hdu 1019 Least Common Multiple
题意要求n个数的lcm,而对于任意的两个数a,b来说 LCM(a,b)=a*b/gcd(a,b),其中gcd(a,b)是a,b的最大公约数,我们利用这个公式就可以很容易的得出答案 PS:一开始我没有处理m=1的情况导致程序超时,这是我自己编程不严谨造成的,下次一定改正。 #include #include #include using namespace std; long long原创 2015-07-21 14:56:23 · 294 阅读 · 0 评论 -
hdu 1018 Big Number
这道题的题意是要求算出n!的位数,由于n 网上有一个更简单的方法: 我们假设n!=10^m,那么容易知道m+1的整数部分就是n!的位数,也就是说,我们只需要求出m的值就可以了, 我们对这个式子两边取对数得m=log10(n!)=log10(1)+log10(2)+……+log10(n),这样我们就可以在O(n)的时间复杂度下得出结果。 #include #include #in原创 2015-07-21 11:07:00 · 291 阅读 · 0 评论 -
hdu 1023 Train Problem II (卡特兰数)
卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列 令h(0)=1,h(1)=1, catalan数满足递推式:h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n>=2) 例如:h(2)=h(0)*h(1)+h(1)*h(0)=1*1+1*1=2 h(3)=h(0)原创 2015-07-21 17:26:51 · 362 阅读 · 0 评论