摘要:
栈和队列都是最基础的数据结构,栈的思想是“先进后出”,队列的思想是“先进先出”。怎么说呢,栈和队列其实都是对于单链表或者数组的一些特殊操作。在后边很多算法中经常用到(比如BFS, SPFA。。。)栈主要操作有:入栈Push;取栈顶Get_Top;出栈(删除栈顶元素)Pop;栈的数组实现(代码非常简单,关键是思想)://数组实现#include <stdio.h>#include <malloc.h>#define maxsize 10typedef struct{ int data[maxsize]; int top; int base;}seqstack;seqsta 阅读全文
摘要:
题目链接http://poj.org/problem?id=1061扩展欧几里得+线性同余方程从题意中很容易得到等式x+mt = y+nt(mod L)//t代表时间移动左右得到 (m-n)t = y-x(mod L);所以 得到(m-n)*a - L*b = y-x的扩展欧几里得,求解a,套上模版就OK了。View Code 1 #include <stdio.h> 2 #include <string.h> 3 __int64 x,y; 4 __int64 ext_eucld(__int64 a,__int64 b) 5 { 6 __int64 t,d; 7 if( 阅读全文
摘要:
题目链接http://poj.org/problem?id=1942题意 输入边长 有多少种走法思路 组合数模板View Code 1 #include<stdio.h> 2 int main() 3 { 4 __int64 n,m,s,t,i,sum; 5 while(~scanf("%I64d%I64d",&n,&m)) 6 { 7 if(n==0&&m==0) 8 { 9 break;10 }11 if(n>m)12 s=m;13 else14... 阅读全文
摘要:
题目链接http://poj.org/problem?id=2115拓展欧几里得算法+线性同余方程题目大意是问A经过多少次能到达B, 当A的值大于 2^k时 A = A%2^k;从题目中可以得到方程: a + c*x = b (mod 2^k) 变形得 c*x = (b-a) (mod 2^k); 再变形得: c*x – 2^k*y = (b – a)解扩展欧几里德方程就可以了View Code 1 #include<iostream> 2 #include<stdio.h> 3 using namespace std; 4 __int64 ext_gct(__int6 阅读全文
摘要:
思路 从网上拿的。。。先输入N表示有N头牛,接下来的N个数是各个牛所在的位置。如果一头牛对另一头牛Moo,那么Moo数就是1号牛所在位置i与2号牛所在位置j的差值,又因为1号牛Moo过去,所以2号牛也要Moo回来,于是Moo数就变为2倍了。1号牛要对剩余所有(N-1)头牛都Moo,如果我们将牛按顺序排好,每头牛i只对它身后的(N-i)头牛Moo,意思是,我们只考虑某头牛Moo出去的,而不考虑别的牛对它Moo回来的,那么它也不对在它前面的牛Moo,那么这就是一个简单的数学问题,每头牛i只对身后的(N-i)头牛Moo。因为所有牛还要Moo回去,所以最后结果乘2就可以了。这就想到可以用循环来实现,对 阅读全文
摘要:
题目链接http://poj.org/problem?id=3461题目大意 以A为子串,查找B中有几个A。思路。KMP算法View Code 1 #include<stdio.h> 2 #include<string.h> 3 #define N 1000001 4 int nextt[N]; 5 char str1[N],str2[N]; 6 void next(char s[]) 7 { 8 int i=1,j=0; 9 int len=strlen(s);10 nextt[0]=-1;11 while(i<len)12 {13 ... 阅读全文
摘要:
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2094图论 拓扑排序 不过难点是输入的是字符 用STL mapView Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<map> 5 using namespace std; 6 map<string,int>p; 7 int o[2001][2001],key[2001]; 8 char str1[100],str2[100]; 9 in 阅读全文
摘要:
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1285图论 最简单的拓扑排序 寻找入度为0的点删掉 然后让跟它相连的点入度减一View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 int map[501][501],topp[501],inde[501]; 5 void toppsort(int n) 6 { 7 int i,j,k; 8 for(i=1;i<=n;i++) 9 {10 for(j=1;j<= 阅读全文
摘要:
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1905题意:给一个 p 和 一个 a,如果这个p 本身就是一个素数,就输出 no,如果不是素数,那么计算( a ^ p) % p 如果结果等于 a 那么输出 yes 否则输出 no也就是伪素数。View Code 1 #include<stdio.h> 2 #include<math.h> 3 __int64 jud(__int64 n) 4 { 5 __int64 i; 6 for(i=2;i*i<n;i++) 7 if(n%i==0) 8 retu... 阅读全文
摘要:
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2035快速幂取模板View Code 1 #include <stdio.h> 2 #include <stdlib.h> 3 int main() 4 { 5 int a,b,cj,jg,i; 6 while(~scanf("%d %d",&a,&b)) 7 { 8 9 if(a==0&&b==0)10 break;11 if(b==0)12 {13 printf("1\n");14 ... 阅读全文