摘要: 水过~~import java.math.BigInteger;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int T, i,j, nlen; int num[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 7... 阅读全文
posted @ 2011-09-05 09:58 qingyezhu 阅读(171) 评论(0) 推荐(0)
摘要: multiset的应用 toj 2196 Nuanran's Idol II/* * toj2196.cpp * * Created on: 2011-9-4 * Author: bjfuwangzhu */#include<iostream>#include<stdio.h>#include<set>#include<algorithm>#include<functional>using namespace std;int main() {#ifndef ONLINE_JUDGE freopen("data.in& 阅读全文
posted @ 2011-09-04 18:19 qingyezhu 阅读(421) 评论(0) 推荐(0)
摘要: 使用凸包模版即可。hdu 1392/* * hdu1392.c * * Created on: 2011-9-2 * Author: 王竹 */#include<stdio.h>#include<math.h>#include<stdlib.h>#define nmax 1001#define eps 1e-8typedef struct point { int x, y;} point;point Point[nmax];int stack[nmax];double res;int cross_product(point p1, point p2, poi 阅读全文
posted @ 2011-09-03 09:41 qingyezhu 阅读(231) 评论(0) 推荐(0)
摘要: 什么是Catalan数说到Catalan数,就不得不提及Catalan序列,Catalan序列是一个整数序列,其通项公式是我们从中取出的就叫做第n个Catalan数,前几个Catalan数是:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, …咋看之下没什么特别的,但是Catalan数却是许多计数问题的最终形式。Catalan数的一些性质Catalan数的基本公式就是上个部分所列出的那样,但是却有一些变形和具体的性质:1、这是根据原来的式子推导出 阅读全文
posted @ 2011-08-27 21:51 qingyezhu 阅读(1312) 评论(0) 推荐(1)
摘要: 两个数A和B异或的结果C就是他们二进制中相同的为0不同的为1,所以本题就是要数C的二进制中1的个数,而求一个数二进制中1的个数的方法很多,下面简单介绍几种:1.数C对2取余,判断余数是不是为1,若是记录一次,之后数C除以2,再进行前面的描述,知道数C为0,结束,代码如下:int getBits(int n) { int res; res = 0; while (n) { if (n % 2 == 1) { res++; } n /= 2; } return res;}2.同上,不过对2取余,采用&,除以2,采用右移,代码如下:int getBits(int n) { int res;. 阅读全文
posted @ 2011-08-27 20:18 qingyezhu 阅读(630) 评论(0) 推荐(1)
摘要: 1. 全排列的数目是n !,当 n=10 时, n ! =3628800 ,接近穷举极限。 2. N个元素的子集为 2^n ,非空子集为 2^n-1 ,非空真子集为 2^n-2 ,当 n=20 时, 2^n=1048576 接近穷举极限。 3. 研究若干可重复元素所组成的序列。假设有m 种元素,则有 m^n 个长度为 n 的序列(也就是每个位置上有 m 种取法,共 n 个位置),另外,长度为 n 的二元串(也就是只包含两种不同字符)的个数等于 n 个不同元素的子集数目(每个位置有 2 种取法,所以有 2^n ,根据上一条,显然等于个数为 n 个的不同元素的子集数目) 一、 二项式系数1. 从n 阅读全文
posted @ 2011-08-27 17:00 qingyezhu 阅读(1867) 评论(4) 推荐(1)
摘要: 鸽舍原理2009-07-24 23:00:03|分类: 经典算法 |标签: |字号大中小订阅(1)鸽舍原理,也称“抽屉原理”或利克雷原则,它是一个重要而又基本的数学原理,应用它可以解决各种有趣的问题,并且常常能够得到令人惊奇的结果,许多看起来相当复杂,甚至无从下手的问题,利用它能很容易得到解决。 原理1:把n+1个元素分成n类,不管怎么分,则一定有一类中有2个或2个以上的元素。 原理2:把多于m×n个物体放到n个抽屉里,那么一定有一个抽屉里有m+1个或者m+1个以 上的物体。 原理2-1:把m个元素任意放入n(n<m=个集合,则一定有一个集合呈至少要有k个元素。 其中 k= m%n( 阅读全文
posted @ 2011-08-26 19:08 qingyezhu 阅读(572) 评论(0) 推荐(0)
摘要: 勾股数定理对于a^2+b^2=c^21、a=x^2-y^22、b=2*x*y3、c=x^2+y^24、gcd(x,y)=1。5、gcd(a,b,c)=1。同时满足这五条式的是一组勾股数,而且对于所有满足这五条式的(x,y)乘一个k(k>=1),即(kx,ky)。就可以表示所有的勾股数,并且勾 股数和三元对(x,y,z)一一对应。换句话说,每个勾股数都只能表示为一个三元对(x,y,z)。并且z=1时,必须满足c%4==1才能分出来。 阅读全文
posted @ 2011-08-26 19:05 qingyezhu 阅读(334) 评论(0) 推荐(0)
摘要: [定理1] 标准Fibonacci序列(即第0项为0,第1项为1的序列)当N大于1时,一定有f(N)和f(N-1)互质其实,结合“互质”的定义,和一个很经典的算法就可以轻松证明对,就是辗转相除法互质的定义就是最大公约数为1数学归纳法是很有用的证明方法,我们接下来这个定理用数学归纳法就很好证明:[定理2]若i为奇数, f(i)*f(i)=f(i-1)*f(i+1)+1,否则f(i)*f(i)=f(i-1)*f(i+1)-1对,这个定理用数学归纳法可以轻松证明,大家有兴趣可以自己尝试[定理3] f(n)=f(i)*f(n-i-1)+f(i+1)*f(n-i)f(n)=f(1)*f(n-2)+ f( 阅读全文
posted @ 2011-08-26 18:42 qingyezhu 阅读(2409) 评论(0) 推荐(1)
摘要: hdu 2643/*第二类Stirling数是把包含n个元素的集合划分为正好k个非空子集的方法的数目。递推公式为:S(n,k) = 0(n<k||k=0),S(n,n) = S(n,1) = 1,S(n,k) = S(n-1,k-1) + kS(n-1,k).*/#include<stdio.h>#define LL long long#define nmax 101#define nnum 20090126LLLL num[nmax][nmax], fac[nmax];void init() { int i, j; for (i = 1, fac[0] = 1; i < 阅读全文
posted @ 2011-08-26 16:52 qingyezhu 阅读(555) 评论(0) 推荐(0)