05 2013 档案

容斥原理
摘要:题目:hdu 1796,hdu 1685,hdu 2204,hdu 4407,hdu 2841http://acm.swust.edu.cn/oj/problem/821/http://zuojie.3322.org:88/soj/problem.action?id=3137http://acm.hdu.edu.cn/showproblem.php?pid=1796http://acm.hdu.edu.cn/showproblem.php?pid=1695http://poj.org/problem?id=3904hdu 2841http://yzmduncan.iteye.com/blog/ 阅读全文

posted @ 2013-05-30 00:00 后端bug开发工程师 阅读(1076) 评论(0) 推荐(0)

hdu 2157(矩阵的快速幂)
摘要:题意:容易理解.分析:如果对于矩阵的乘法懂的话,会很容易想到如何去做的,其实转化下就是关于矩阵的快速幂的求法,具体的为什么我们也不好说,自己去好好想想吧!!不过这个题目也挺坑爹的,那就是会有重边这种情况!!就是如果有一个点直接到另一个点有几条路的话只算一条!!代码实现:#include<iostream>#include<stdio.h>#include<string.h>using namespace std;struct node{ int p[25][25];};struct node suan(struct node a,struct node b, 阅读全文

posted @ 2013-05-28 23:58 后端bug开发工程师 阅读(1747) 评论(9) 推荐(1)

poj 3233(矩阵的快速幂+等比矩阵的性质)
摘要:题意:容易理解.分析:求a^1+..a^n这是矩阵乘法中关于等比矩阵的求法:|A E||0 E|其中的A为m阶矩阵,E是单位矩阵,0是零矩阵。而我们要求的是: A^1+A^2+..A^L,由等比矩阵的性质|A , 1| |A^n , 1+A^1+A^2+....+A^(n-1)| |0 , 1| 的n次方等于|0 ,1| 所以我们只需要将A矩阵扩大四倍,变成如上形式的矩阵B,然后开L+1次方就可以得到1+A^1+A^2+....+A^L。由于多了一个1,所以最后得到的答案我们还要减去1。同理我们把矩阵A变成B:|A E||0 E|然后我们就是求B的n+1次幂之后得到的矩阵为|x1 x2||x3 阅读全文

posted @ 2013-05-28 12:03 后端bug开发工程师 阅读(3721) 评论(0) 推荐(2)

hdu 3501(欧拉函数)
摘要:题意:容易理解.分析:开始的时候我是不会做的,后来查了资料之后知道:对于整数n,如果x(x<n)与n互质,那么(n-x)也与n是互质的;同理如果x(x<n)与n不互质,那么(n-x)也与n是不互质的。知道这个之后就可以得出:在0<x<n时,存在这样的x与n互质的个数假设为num(可以通过欧拉函数求得),那么所有与n互质的x的和sum=num*n/2.知道这个之后这个题基本上就是一道水题了。代码实现:#include<stdio.h>#include<string.h>int haha(int n){ int res=n,i; for(i=2;i* 阅读全文

posted @ 2013-05-27 21:12 后端bug开发工程师 阅读(499) 评论(0) 推荐(1)

hdu 2588(欧拉函数)
摘要:题意:容易理解.分析:假设x<=n,n=p*d,x=q*d.假设n与x的最大公约数为d,则能够推出p与q肯定是互质的,因为x<=n所以要求的就是p的欧拉函数值了,那么我们就转化成求满足:n=p*d,并且d>=m的p的欧拉函数值之和了。代码实现:#include<stdio.h>#include<string.h>int haha(int n)//求n的欧拉函数值{ int res=n,i,j; for(i=2;i*i<=n;i++) { if(n%i==0) { n=n/i; while(n%i==0) ... 阅读全文

posted @ 2013-05-27 16:39 后端bug开发工程师 阅读(1645) 评论(0) 推荐(0)

求单个数的欧拉函数
摘要:题意:给你一个数n,n很大(n<=100000000),但是题目中的测试数据不是很多,这样的话直接用求单个欧拉函数值的方法求解,如果用前面那种方法打个表的话是行不通的,因为n的值太大不适合开设数组,所以这时应该直接求n的欧拉函数值。代码实现:#include<iostream>#include<cmath>using namespace std;int main(){ int n,i,temp; while(scanf("%d",&n)!=EOF) { temp=n; for(i=2;i*i<=n;i++) { if... 阅读全文

posted @ 2013-05-27 16:11 后端bug开发工程师 阅读(2359) 评论(0) 推荐(0)

基本欧拉函数
摘要:证明:欧拉函数的证明暂时还不会,等会了再写吧,概念就是:n的欧拉函数是指不超过n的与n互质的数有多少个。比如与8互质的数为:1、3、5、7,所以8的欧拉函数值为4.求法:假设要求n的欧拉函数f(n)=n*(1-1/p1)*(1-1/p2)*...*(1-1/pm),其中p1,p2,...pm为小于等于n的n的质因子,比如10的质因子为2,5,所以f(10)=10*(1-1/2)*(1-1/5)=4.代码实现:#include<stdio.h>#include<string.h>#include<math.h>int a[1000001],prime[1000 阅读全文

posted @ 2013-05-26 23:40 后端bug开发工程师 阅读(820) 评论(2) 推荐(0)

hdu 2296(AC自动机+dp)
摘要:题意:容易理解... 分析:这个题我做了几天,不是说这个题有多难,而是因为我太水了(比较两个字符串的大小都弄错了)。首先是状态转移方程,这个还是比较容易的:dp[i][j]=dp[i-1][k]+(这个点的权值);如果是单纯的让你求出最大的权值,那就比较简单了,但是题意让你输出的事权值最大的字符串, 阅读全文

posted @ 2013-05-16 23:51 后端bug开发工程师 阅读(495) 评论(2) 推荐(0)

优先队列模板
摘要:优先队列模板:#include<iostream>#include<queue>using namespace std;struct node{ friend bool operator<(node n1,node n2) { if(n1.num1<n2.num1)//从小到大排序的,与快排刚好相反 return 0; else if(n1.num1==n2.num1&&(n1.num2<n2.num2)) return 0; else return 1; } i... 阅读全文

posted @ 2013-05-09 23:47 后端bug开发工程师 阅读(234) 评论(0) 推荐(0)

hdu 2243(Trie图(AC自动机)+DP+矩阵乘法+恶心取模)
摘要:题意:容易理解... 思路:就是poj 2778的加强版吧,实现的思想差不多,在做这道题之前建议先做poj 1625、poj 2778,这三道题是同一种题型吧!出现过给定的单词的单词数=总单词数-未出现过给定单词的单词数,前者等于26^1+26^2+26^3....26^l,后者等于A^1+A^2+ 阅读全文

posted @ 2013-05-05 19:32 后端bug开发工程师 阅读(343) 评论(0) 推荐(0)

矩阵乘法的题目
摘要:本来我还不想学这个算法的,因为以前从来没听说过,不过最近做AC自动机的题目时一直遇到需要用矩阵乘法来解决的题目,所以要学习下:poj 3070、poj3233 阅读全文

posted @ 2013-05-05 15:57 后端bug开发工程师 阅读(277) 评论(0) 推荐(0)

poj 2778(Trie图(AC自动机)+DP+矩阵乘法)
摘要:题意:容易理解... 思路:这个之前做的poj 1625差不多,只是1625是属于大数的,用矩阵乘法不好做(会爆栈),直接DP就行,这一题需要用到矩阵乘法来提高程序运行效率,要注意的地方就是取模运算挺慢的所以要尽量减少这种运算,开始的时候我一直RE,原来是因为m=0的时候没有考虑到。在做这题之前建议 阅读全文

posted @ 2013-05-05 12:08 后端bug开发工程师 阅读(324) 评论(0) 推荐(0)

poj 1625(Trie图(AC自动机)+DP+精度计算)
摘要:题意:首先输入三个整数:n,m,p;n代表总共有n个字母,m代表字符串的长度为m,p代表病毒字符串的个数;题目让你求的是不包含病毒的字符串长度为m的个数为多少。 思路:这个题让我意识到我自己是有多么的水啊,中南一大牛花了一天的时间自己想出来并且解决它,而我花费了一个星期的时间把别人的代码看懂了,啊! 阅读全文

posted @ 2013-05-02 20:54 后端bug开发工程师 阅读(873) 评论(1) 推荐(0)

导航