摘要: 链接http://acm.hdu.edu.cn/showproblem.php?pid=2050本题目的关键在于从直线类推到折线,两条直线比一条折线多分两个部分,而n条折线则比2n条直线少2n个部分 1 #include<stdio.h> 2 __int64 a[10003]={1,4}; 3 void f() 4 { 5 int i; 6 for(i=2;i<10003;i++) 7 a[i]=a[i-1]+4*i-1; 8 } 9 int main()10 {11 f();int n;12 scanf("%d",&n);13 int ... 阅读全文
posted @ 2012-12-27 21:05 再见~雨泉 阅读(150) 评论(0) 推荐(0) 编辑
摘要: ACM队不是为了一场比赛而存在的,为的是队员的整体提高。大学期间,ACM队队员必须要学好的课程有:l C/C++两种语言l 高等数学l 线性代数l 数据结构l 离散数学l 数据库原理l 操作系统原理l 计算机组成原理l 人工智能l 编译原理l 算法设计与分析除此之外,我希望你们能掌握一些其它的知识,因为知识都是相互联系,触类旁通的。以下学习计划每学期中的内容不分先后顺序,虽说是为立志于学习ACM的同学列的知识清单,但内容不限于ACM的知识。英语之类与专业相距较远的课程请自行分配时间,这里不再列举。大一上学期:必学:2. 简单数学题(推荐“数学”分类20道以上)需要掌握以下基本算法:a) 欧几里 阅读全文
posted @ 2012-12-27 20:46 再见~雨泉 阅读(374) 评论(0) 推荐(0) 编辑
摘要: 题目链接http://openoj.awaysoft.com/JudgeOnline/problem.php?id=2010如果直接循环判断,无疑必定超时,所以此题的关键就是进行预处理操作,代码如下: 1 #include<stdio.h> 2 #include<math.h> 3 bool p[1000001]; 4 long long q[1000001]; //VC中用__int64定义 , %I64d 输出 5 void prime() //预处理 6 { 7 long long i,j; 8 p[1]=1; 9 for(i=2;i<1... 阅读全文
posted @ 2012-12-27 20:37 再见~雨泉 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 输入n个元素组成的序列S,你需要找出一个最大乘积的连续子序列。如果不是正数,输出-1,表示无解。1=<n=<18,-10=<Si=<10。样例输入:32 4 -352 5 -1 2 -1样例输出:820#include<stdio.h>int main(){ int n; while(~scanf("%d",&n)) { int s[20]; for(int i=0;i<n;i++)scanf("%d",&s[i]); __int64 ji[400],max=-100000;int t=0; me 阅读全文
posted @ 2012-12-27 17:23 再见~雨泉 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 链接http://acm.hdu.edu.cn/showproblem.php?pid=2048#include<stdio.h>__int64 fact(int n){ if(n==1)return n; return (__int64)n*fact(n-1);}int main(){ __int64 f[20]={0,0,1},t; for(t=3;t<=20;t++) f[t]=(t-1)*(f[t-1]+f[t-2]); int n;while(~scanf("%d",&n)) { int i;int m; ... 阅读全文
posted @ 2012-12-27 16:32 再见~雨泉 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 链接http://acm.hdu.edu.cn/showproblem.php?pid=2047#include<stdio.h>__int64 a[40]={1,3};void f(){ int i; for(i=2;i<=40;i++) a[i]=2*(a[i-1]+a[i-2]);}int main(){ f(); int n; while(~scanf("%d",&n)) printf("%I64d\n",a[n]); return 0;} 阅读全文
posted @ 2012-12-27 16:31 再见~雨泉 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 链接http://acm.hdu.edu.cn/showproblem.php?pid=2046#include<stdio.h>int main(){ int a,b,n; __int64 s[100]; while(scanf("%d",&a)!=EOF) { s[1]=1; s[2]=2; for(n=3;n<=a;n++) { s[n]=s[n-1]+s[n-2]; } if(a==1||a==2) printf("%d\n",a); ... 阅读全文
posted @ 2012-12-27 16:30 再见~雨泉 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 链接http://acm.hdu.edu.cn/showproblem.php?pid=2045#include<stdio.h>int main(){ int n,i; __int64 a[51];a[1]=3;a[2]=6;a[3]=6; while(scanf("%d",&n)!=EOF) { for(i=4;i<=n;i++) a[i]=2*a[i-2]+a[i-1]; printf("%I64d\n",a[n]); } return 0;} 阅读全文
posted @ 2012-12-27 16:29 再见~雨泉 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2044#include<stdio.h>__int64 a[50]={1,1};void f(){ int i; for(i=2;i<50;i++) a[i]=a[i-1]+a[i-2];}int main(){ f();int n; while(~scanf("%d",&n)){ int i;int x,b; for(i=0;i<n;i++){ scanf("%d%d",&x,&b); pr... 阅读全文
posted @ 2012-12-27 16:28 再见~雨泉 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 输入正整数n,按从小到大输出所有形如abcde/fghij=n的表达式。其中a~j为0~9的一个排列,2=<n=<79.样例输入:62样例输出:79546/01283=6294736/01528=62(代码有些累赘。。。)#include<stdio.h>#include<string.h>int main(){ int n; while(~scanf("%d",&n)) { int a,b,c,d,e; for(a=0;a<=9;a++) for(b=0;b<=9;b++) for(c=0;c<... 阅读全文
posted @ 2012-12-27 16:16 再见~雨泉 阅读(532) 评论(0) 推荐(0) 编辑
摘要: 每辆火车都从A方向驶入车站,再从B方向驶出车站,同时它的车厢可以进行某种形式的重新组合。假设从A方向驶来的火车有n节车厢(n<1000),分别按顺序编号为1,2,...,n。假定在进入车站之前每节车厢之间都是不连着的,并且它们可以自行移动,直到处在B方向的铁轨上。另外假定车站C里可以停放任意多节的车厢。但是一旦当一节车厢进入车站C,它就不能再回到A方向的铁轨上了,并且一旦当它进入B方向的铁轨后,它就不能再回到车站C。负责车厢调度的工作人员需要知道能否使它以a1,a2,...,an的顺序从B方向驶出。 请写一个程序,用来判断能否得到指定的车厢顺序。【输入格式】 输入由两行组成:第一行有n( 阅读全文
posted @ 2012-12-27 15:33 再见~雨泉 阅读(361) 评论(0) 推荐(0) 编辑
摘要: 输入m,n表示m*n的迷宫,接下来m*n行表示迷宫,用1表示路,0表示墙。输出左上角到右上角最少步数及走法.输入:5 51 0 1 1 11 0 1 0 11010 11111 11 0 0 1 1输出:minimum steps:8<0,0><1,0><2,0><3,0><3,1><3,2><2,2><1,2><0,2><0,3><0,4>核心在于BFS在走迷宫时,其重要在于一层一层走并记录每层的最短距离下面用dist[x][y]表示,而x*n+y就是标号[x] 阅读全文
posted @ 2012-12-27 13:34 再见~雨泉 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 两个不超过100位的大数相加输入:11111111111111111111111111111111111111111111111111111111111111111111111111111111输出:2222222222222222222222222222222222222222#include<stdio.h> #include<string.h> int main() { char a[100]={'0'},b[100]={'0'}; while(~scanf("%s%s",a,b)) { int i; int l 阅读全文
posted @ 2012-12-27 13:27 再见~雨泉 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 输入n表示盘子的个数,只能小的在上,大的在下,求将第一个移到第三个的移法#include <stdio.h> int main() { void hanoi(int n,char one,char two,char three); // 对hanoi函数的声明 int m; printf("input the number of diskes:"); scanf("%d",&m); printf("The step to move %d diskes:\n",m); hanoi(m,'A',' 阅读全文
posted @ 2012-12-27 13:25 再见~雨泉 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 输入n,表示边数,接着逆时针输入坐标,球多边形面积(注意多边形凹凸性!!!)#include<stdio.h> int main( ) { int n; while(scanf("%d",&n) && n) { int i; float a[100][2],s=0; scanf("%f %f",&a[0][0],&a[0][1]); for(i=1;i<n;i++) { scanf("%f %f",&a[i][0],&a[i][1]); ... 阅读全文
posted @ 2012-12-27 13:23 再见~雨泉 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 输入两个不超过200位的大数,输出它们的积输入样例1234567890098765432100输出样例1219326311126352690000在下面的例子程序中,用 a[220]和b[220]分别存放两个乘数,用z[440]来存放积。计算的中间结果也都存在z中。aResult 长度取400 是因为两个200 位的数相乘,积最多会有400 位。a[0], b[0], z[0]都表示个位。计算的过程基本上和小学生列竖式做乘法相同。为编程方便,并不急于处理进位,而将进位问题留待最后统一处理。现以 835×49 为例来说明程序的计算过程。147先算835×9。5×9 阅读全文
posted @ 2012-12-27 13:21 再见~雨泉 阅读(235) 评论(0) 推荐(0) 编辑