摘要: 递推:f[i]=f[i-2]+f[i-1];这个位置可以由左边位置过来也可以由左上位置过来需要注意:利用等效可以把首位置移到0,末位置移到b-a+1 题目传送门 1 #include<stdio.h> 2 __int64 f[50]; 3 int main() 4 { 5 int a,b,n,i; 6 f[0]=1; 7 f[1]=1; 8 f[2]=1; 9 for(i=3;i<50;i++)10 f[i]=f[i-2]+f[i-1];11 scanf("%d",&n);12 while(n--)13 {14... 阅读全文
posted @ 2013-05-10 09:53 飞向梦 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 其实这个递推求解系列的题目挺有意思的,想明白了咋回事还是觉得有意思本层楼梯可以由下一层跳一次上来,也可以由下下层跳一次上来f[i]=f[i-2]+f[i-1];这种递推的问题尤其要注意初始化 题目传送门 1 #include<stdio.h> 2 int f[41]={0}; 3 int main() 4 { 5 int i,n,k; 6 f[1]=1;f[2]=1; 7 for(i=3;i<41;i++) 8 { 9 f[i]=f[i-2]+f[i-1];10 }11 scanf("%d",&n);12 while(n... 阅读全文
posted @ 2013-05-10 09:49 飞向梦 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 看到这个题目号的时候激动了一下,呵呵,对一些数字比较敏感,就跟走到哪看到跟自己寝室号一样的号码……素数判定是数论里面基本的知识 题目传送门 1 #include<stdio.h> 2 #include<math.h> 3 4 int prime(int n) 5 { 6 int i; 7 if(n==2||n==3) return 1; 8 for(i=2;i<=sqrt(n);i++) 9 if(n%i == 0) return 0;10 return 1;11 }12 13 int main()14 {15 int x,y,i,f... 阅读全文
posted @ 2013-05-10 09:44 飞向梦 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 这个题目记得高中的NOI里面就有,看来经典的终归是经典那如果对每个数对进行拆分可能会超时(尤其是比赛的时候),就想的竞赛中经典思想——以空间换时间,简单来说就是把三位数都给算一遍存储起来,是了就存1,不是存0,然后直接读入数据输出结果也可能是见过,也可能是多想了一下,发现水仙花数只有四个(这个。。。),进一步优化程序。 题目传送门 1 #include<stdio.h> 2 int main() 3 { 4 int a[] = {153,370,371,407}; 5 int m,n,i,flag; 6 while(scanf("%d%d",&m,&am 阅读全文
posted @ 2013-05-10 09:28 飞向梦 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 这种可能就属于那种第一次见没有思路,但是知道答案后一想,奥,原来这样啊。。。 题目传送门 1 #include<stdio.h> 2 int main() 3 { 4 int n,max,t,a; 5 __int64 sum; //注意和的范围越界 6 scanf("%d",&t); 7 while(t--) 8 { 9 scanf("%d",&n);10 max = 0;11 sum = 0;12 while(n--)13 {14 ... 阅读全文
posted @ 2013-05-10 09:22 飞向梦 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 题目比较简单,但是很有纪念意义,算是第一个遇到的积分题目,同时也发现原来计算机也不是万能的啊,需要预先准备一些工作才能交个计算机来完成。 题目传送门 1 #include<stdio.h> 2 int main() 3 { 4 double x1,y1,x2,y2,x3,y3; 5 double area,a; 6 int n; 7 scanf("%d",&n); 8 while(n--) 9 {10 scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3, 阅读全文
posted @ 2013-05-10 09:10 飞向梦 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 这个题目比较简单,主要是想写写快排练练手。。。 题目传送门 1 #include<stdio.h> 2 #define swap(x,y){int t=x;x=y;y=t;} 3 int a[1000000]; 4 void quicksort(int l, int r) 5 { 6 int i,j,mid; 7 i = l;j=r;mid=a[(l+r)/2]; 8 do 9 {10 while(a[i]>mid)i++;11 while(a[j]<mid)j--;12 if(i<=j)13 {... 阅读全文
posted @ 2013-05-10 09:07 飞向梦 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 这个题目跟1021 Fibonacci Again相似很多(都是跟“%”相关的啦),还是每步取余,不过看似n有点大,可能会超时吧(没试。。。)还来看可爱的“%”,前两个数决定第三个数,对7取余,前两个数可以去0~7,总共49中情况,也就是说49个数以内定会循环我是考虑了直接从第一个数开始循环,有人会说会不会从中间开始循环。。。这个倒证明,不过第一个开始循环的话包含了中间情况了(主要是懒得想了。。) 题目传送门 1 #include<stdio.h> 2 int main() 3 { 4 int a,i,b,n,f[50]={0},k; 5 while(scanf("%d% 阅读全文
posted @ 2013-05-10 09:05 飞向梦 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 这个题目比较有意思,直接算会溢出,但是又涉及到可爱的“%”,所以每步都取余肯定是能过进一步优化:前两个数决定第三个数,那么看前两个数有几种情况(思考中),取值范围是0~2,共9中情况,也就是说肯定是9种以内肯定循环的啦 题目传送门#include<stdio.h>int main(){ long n; while(scanf("%ld",&n)!=EOF) { if(n%8==2||n%8==6) printf("yes\n"); else printf("no\n"); } return 0;} 阅读全文
posted @ 2013-05-10 08:56 飞向梦 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 也是明显会溢出的题目,考虑优化考虑到一个数次方一直增加,最后一位会出现规律比如2就会2、4、8、6循环再加上次数是N又简化些代码貌似不是很简化,可以一个变量存储结果,最后输出(不过看着比较优美,懒得改了),其实比赛中很少去考虑这些小的优化的,平时可能会看看oj上显示自己程序代码多少B,空间多少,然后改程序少一个字母就挺兴奋的,比赛的时候主要就考虑整体的算法了,这就要靠平时养成一些好习惯啦 题目传送门 1 #include<stdio.h> 2 int main() 3 { 4 int n,num; 5 int a[4][4]={{6,2,4,8},{1,3,9,7},{1,7... 阅读全文
posted @ 2013-05-10 08:48 飞向梦 阅读(142) 评论(0) 推荐(0) 编辑