摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1285看到的一个比较好的模板#include <iostream>using namespace std;#define MAX 505int map[MAX][MAX];int p[MAX];int toposort(int n,int mat[][MAX],int* ret){ //浙大模板,未改一点 int d[MAX],i,j,k; for (i=0;i<n;i++) for (d[i]=j=0;j<n;d[i]+=mat[j++][i]); for (k=0;k... 阅读全文
posted @ 2011-09-08 19:38 ○o尐懶錨o 阅读(137) 评论(0) 推荐(0) 编辑
摘要: #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct AOE { int n; //所指为该节点的值 struct AOE *next; }AOE; // 一个动态链表用来记录后面的连接表struct T { int n,flag; //该节点前面有多少个元素 AOE *next; }VEX[524]; //静态链表用来储存头结点 void build( int x, int y) //建立表 { AOE... 阅读全文
posted @ 2011-09-08 19:27 ○o尐懶錨o 阅读(161) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1061这个是大数问题吧,不过数据太大一定有技巧的,n^n(n<=1000000000), 题目要取的是个位数字,所以我们只有把(n%10)^n%10就可以了,因为进位对个位不影响,对于n的次方还是很大,我们就先求n/2,可是还是要考虑到n为奇数的时候 t=t*t*a,(a=n%10);比如当n=5的时候n/2=2,t=(a^2)*(a^2)*(a)=a^5,但a^4即n=4;n/2=2;此时t=(a^2)*(a^2)代码:View Code #include <stdio.h>#includ 阅读全文
posted @ 2011-08-18 09:43 ○o尐懶錨o 阅读(172) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1576这是一道扩展GCD题,只要找出方程就可以用模板了,n=A%9973可以得到A=9973*y+n,设A/B=x,所以A=B*x;可以得到方程B*x-9973*y=n,解方程就可以了,若有不明白的地方请看http://www.cnblogs.com/yuelingzhi/archive/2011/08/13/2137582.html代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#i 阅读全文
posted @ 2011-08-17 00:02 ○o尐懶錨o 阅读(525) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2669这是一道纯模板的扩展GCD,直接求a*x+b*y=1就可以了,我们直接用模板,不过还要注意数的大小超过int,用__int64即可,若有不懂的地方请看http://www.cnblogs.com/yuelingzhi/archive/2011/08/13/2137582.html代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>__in 阅读全文
posted @ 2011-08-16 22:39 ○o尐懶錨o 阅读(472) 评论(0) 推荐(0) 编辑
摘要: 欧拉定理之运用,#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>int mod1(int x){ int a=1,b=1,c=1,r; for(int i=0;i<=x;++i) { a=a*(i?4:2)%29; //表示2^(2*x+1) b=b*3%29; //3^(x+1) c=c*22%29; //167^(x+1) } r=(a-1)*(b-1)*(c-1)%29; //s=r/332, return 9*r%29; //s%29= 阅读全文
posted @ 2011-08-16 19:30 ○o尐懶錨o 阅读(159) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1418 这是一道纯模版的几何欧拉公式,它是由V+F-E=X(P),V是多面体P的顶点个数,F是多面体P的面数,E是多面体P的棱的条数,X(P)是多面体P的欧拉示性数。 如果P可以同胚于一个球面(可以通俗地理解为能吹胀而绷在一个球面上),那么X(P)=2,如果P同胚于一个接有h个环柄的球面,那么X(P)=2-2h。 X(P)叫做P的欧拉示性数,是拓扑不变量,就是无论再怎么经过拓扑变形也不会改变的量,是拓扑学研究的范围。 在多面体中的运用: 简单多面体的顶点数V、面数F及棱数E间有关系 V+F-E=2 这个公式叫 阅读全文
posted @ 2011-08-15 20:54 ○o尐懶錨o 阅读(256) 评论(0) 推荐(1) 编辑
摘要: http://poj.org/problem?id=2115这是一道线性同余方程,式子为:c*x=(b-a)%(2^k)可化为c*x+(2^k)*y=b-a;但是首先我们得保证c是正数才可以用扩展GCD;故此时,我们应做(b-a)%(2^k)+(2^k)即可,用模板酒很简单了,最后被卡在1<<k是默认为int型必须强制转化问long long,为了这个wa很多次,翻遍了解题报告总算发现错误了。。。View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include & 阅读全文
posted @ 2011-08-15 12:00 ○o尐懶錨o 阅读(199) 评论(0) 推荐(1) 编辑
摘要: http://poj.org/problem?id=1061这是一道扩展GCD的题,说要学习说了好久,总算学会了,得感谢旭娃神牛啊,我一开始不懂为什么要用s*c及其s+b直到s>0,那我就一一解释:1、s*c是因为我们把方程转化为a‘*x+b’*y=1计算实际方程是a*x+by=c;2、s求得只是其中一个解,而s的解无数,s=s0+b*t(t代表正整数);故我们只要加b直到s>0即可,特别注意上诉b,c都是除以gcd(a,b)后的b,c,有不理解的请看:http://www.cnblogs.com/yuelingzhi/archive/2011/08/13/2137582.html 阅读全文
posted @ 2011-08-14 19:56 ○o尐懶錨o 阅读(268) 评论(0) 推荐(1) 编辑
摘要: 扩展欧几里德算法-求解不定方程,线性同余方程。 设过s步后两青蛙相遇,则必满足以下等式: (x+m*s)-(y+n*s)=k*l(k=0,1,2....) 稍微变一下形得: (n-m)*s+k*l=x-y令n-m=a,k=b,x-y=c,即 a*s+b*l=c 只要上式存在整数解,则两青蛙能相遇,否则不能。 首先想到的一个方法是用两次for循环来枚举s,l的值,看是否存在s,l的整数解,若存在则输入最小的s,但显然这种方法是不可取的,谁也不知道最小的s是多大,如果最小的s很大的话,超时是明显的。 其实这题用欧几里德扩展原理可以很快的解决,先来看下什么是欧几里德扩展原理: 欧几里德算法又称辗转相 阅读全文
posted @ 2011-08-13 22:26 ○o尐懶錨o 阅读(7479) 评论(0) 推荐(5) 编辑