摘要: 扩展欧几里德算法-求解不定方程,线性同余方程。 设过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 阅读(7522) 评论(0) 推荐(5) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2104这道题看很久啊,意思是n个人围成一个圈,大家玩丢手帕游戏,手帕藏在某一个人的箱子里,Haha来找,每一次他都会跳过m-1个人。问你Haha是不是一定能找到手帕。因为Haha找的次数是无限的,可以永远找下去,所以,只要他能把所有的人都找一遍就一定能找到。但按照他的这种找法,如果n和m不互质的话,不互质就会出现某些人是永远不会找。所以看一下 n和m的最大公约数就行了代码:#include <stdio.h>#include <string.h>#include <stdlib. 阅读全文
posted @ 2011-08-13 21:05 ○o尐懶錨o 阅读(1186) 评论(1) 推荐(1) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1008这是一道简单题,是一道模拟电梯上下,直接计算就可以了代码:#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>int main(){ int a[100],n,sum; while(scanf("%d",&n),n) { a[0]=0;sum=0; for(int i=1;i<=n;++i) { scanf("%d&qu 阅读全文
posted @ 2011-08-13 20:12 ○o尐懶錨o 阅读(146) 评论(0) 推荐(1) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1049这是一道简单题,其实题目很简单,就是一条虫,每步爬u,休息的时候下滑d,知道虫子爬出n的距离,直接模拟就可以了,不过判断时注意一点,就是最后一步不休息也可以。。代码:#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>int main(){ int n,u,d,sum,k; while(scanf("%d%d%d",&n,&u, 阅读全文
posted @ 2011-08-13 20:10 ○o尐懶錨o 阅读(244) 评论(0) 推荐(1) 编辑