能够参加这次比赛得了第一名,首先得感谢阳哥,谢谢你当初的帮助,让我在这一年进步这么大啊
但是我认为自己输给了自己,没有在最后的关头做最正确的决定!!!!!
因为最后一题比赛结束的四十分钟前就知道怎么做了,却没有A掉
附上一榜单:(大牛勿笑)
1001
Judge
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 72 Accepted Submission(s) : 11
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
LASANQQ最近做了一套JAVA选择题试卷,这套试卷一共有40道选择题,每道选择题都有ABCD四个选项,每道题的分值为1分。
这一天他把做好的试卷交给了有标准答案的UEFI,但是由于一些原因,LASANQQ的试卷上的一些选择题选项模糊不清了,但是UEFI也给出了自己批改的结果,现在,请聪明的你编写一个程序判断下UEFI的批改情况。
Input
有多组输入,每组输入占三行。每行有一串四十个字符的字符串,第一行输入字符串S1,S1表示LASANQQ已经模糊的答案,字符串包含’A’,’B’,’C’,’D’ ,’X’五个字符一个或多个,’X’表示已经模糊的选项,第二行输入字符串S2,S2表示标准答案,包含’A’,’B’,’C’,’D’四个字符一个或多个。第三行输入一个整数N(0<=N<=40),N就是UEFI给出的分数。输入以”END”作为结束,你的程序不处理这行。
Output
如果通过你的判断,UEFI给出的分数一定是正确的,输出”Absolute”;如果通过你的判断,UEFI给出的分数可能正确,输出”Possible”;假如通过你的判断,UEFI给出的分数一定是错误的,输出”Wrong”。
Sample Input
BACDBACDBAACCCDDDBCDBDCBABBBBDDDDAAACCAC BACDBACDBAACCCDDDBCDBDCBABBBBDDDDAAACCAD 39 BACDBACDBAACCCDDDBCDBDCBABBBBDDDDXXXCCAC BACDBACDBAACCCDDDBCDBDCBABBBBDDDDAAACCAC 39 BACDBACDBAACCCDDDBCDBDCBABBBBDDDDXXXCCAC BACDBACDBAACCCDDDBCDBDCBABBBBDDDDAAACCAC 36 END
Sample Output
Absolute Possible Wrong
Author
FlushHip
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; char a[55],b[55]; int num; int main() { while(scanf("%s",a)!=EOF) { if(!strcmp(a,"END")) return 0; scanf("%s",b); scanf("%d",&num); int temp=0; int flag=0; for(int i=0;i<40;i++){ if(a[i]=='X') flag++; else if(a[i]==b[i]) temp++; } if(flag==0&&temp==num) puts("Absolute"); else if(flag&&(temp<=num&&num<=(temp+flag))) puts("Possible"); else puts("Wrong"); } return 0; }
1002
Digit Solitaire
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 22 Accepted Submission(s) : 7
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
Despite the glorious fall colors in the midwest, there is a great deal of time to spend while on a train from St. Louis to Chicago. On a recent trip, we passed some time with the following game.
We start with a positive integer S. So long as it has more than one digit, we compute the product of its digits and repeat. For example, if starting with 95, we compute 9 × 5 = 45. Since 45 has more than one digit, we compute 4 × 5 = 20. Continuing with 20,
we compute 2 × 0 = 0. Having reached 0, which is a single-digit number, the game is over.
As a second example, if we begin with 396, we get the following computations:
3 × 9 × 6 = 162
1 × 6 × 2 = 12
1 × 2 = 2
and we stop the game having reached 2.
Input
Each line contains a single integer 1 ≤ S ≤ 100000, designating the starting value. The value S will not have any leading zeros. A value of 0 designates the end of the input.
Output
For each nonzero input value, a single line of output should express the ordered sequence of values that are considered during the game, starting with the original value.
Sample Input
95 396 28 4 40 0
Sample Output
95 45 20 0 396 162 12 2 28 16 6 4 40 0
Author
KZF
#include<stdio.h> #include<string.h> int a[10]; int pos; int deal(int n) { pos=0; int ans=1; while(n) { ans=ans*(n%10); n=n/10; } return ans; } int main() { int num; while(scanf("%d",&num),num!=0) { while(num>9) { printf("%d ",num); num=deal(num); } printf("%d\n",num); } return 0; }
1003
积分
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 33 Accepted Submission(s) : 7
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
你还记得如何积分嘛,现在,聪明的你一定能编一个程序计算出一个多项式f(x)的积分。
Input
有多组数据,输入以-1结束,不超过50组。每组数据有三行。
第一行输入一个整数,代表多项式f(x)的维数n(n < 8)
第二行有n+1个实数,第i个数mi代表 x^(i-1) 的系数(mi < 10),mi最多有两位小数。
第三行有两个数,第一个数为积分下限a,第二个数为积分上限b(-10< a <= b<10),a,b最多有两位小数。
所有同行的多个数字间都由一个空格隔开。
Output
输出占一行,即积分值,结果保留两位小数。
Sample Input
4 0 2 0 6 3 1 3 7 5 1 10 3 5 -2 2 4 -2 2 -1
Sample Output
273.20 210.48
Author
XC
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> using namespace std; int n; double a,b; double num[15]; double power(double x,int y) { double temp=1; for(int i=1;i<=y;i++) temp=temp*x; return temp; } int main() { while(scanf("%d",&n)!=EOF) { if(n==-1) return 0; for(int i=0;i<=n;i++) scanf("%lf",&num[i]); scanf("%lf%lf",&a,&b); for(int i=0;i<=n;i++) num[i]=num[i]*(1/((double)(i+1))); double ans_a=0; double ans_b=0; for(int i=0;i<=n;i++){ ans_a+=num[i]*power(a,i+1); ans_b+=num[i]*power(b,i+1); } printf("%.2lf\n",ans_b-ans_a); } return 0; }
1004
Adding
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 1 Accepted Submission(s) : 1
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
Jonn have a difficult problem to solve, the problem is that Adding. That means: “give you two N’s base number, and your task is calculating the sum of the two numbers”. You may think the problem is very easy! And do it now.
Input
Input consists of multiple problem instances, end of EOF. Each instance consists of N, where 2 <= N <=16, and two strings, the string is the number(the string makes up "0~9,a~f,A~F"), where the lenth of number no more than 10^1000.
EOF is the end of input, for example "while(scanf("%d",&n)!=EOF)"
Output
For each problem instance, you should output one line containing the sum of the two numbers.if the string of ans has ‘a-f’,print the uppercase. Take care that the string will not have any leading zeros.
Each instance output a blank line.
Sample Input
2 010 111 10 111 89 16 aB 10 10 000 00
Sample Output
1001 200 BB 0
Author
FlushHip
#include<string.h> #include<stdio.h> #include<algorithm> using namespace std; void print(int x) { if(x==15) printf("F"); else if(x==14) printf("E"); else if(x==13) printf("D"); else if(x==12) printf("C"); else if(x==11) printf("B"); else if(x==10) printf("A"); else printf("%d",x); } int main() { int n; char a[1010],b[1010]; while(scanf("%d",&n)!=EOF) { getchar(); scanf("%s%s",a,b); int len1=strlen(a); int len2=strlen(b); reverse(a,a+len1); reverse(b,b+len2); int maxlen=max(len1,len2); int ans[1010]; memset(ans,0,sizeof(ans)); for(int i=0;i<len1;i++){ if(a[i]<='9'&&a[i]>='0') ans[i]+=a[i]-'0'; else if(a[i]<='F'&&a[i]>='A') ans[i]+=a[i]-'A'+10; else if(a[i]<='f'&&a[i]>='a') ans[i]+=a[i]-'a'+10; } for(int i=0;i<len2;i++){ if(b[i]<='9'&&b[i]>='0') ans[i]+=b[i]-'0'; else if(b[i]<='F'&&b[i]>='A') ans[i]+=b[i]-'A'+10; else if(b[i]<='f'&&b[i]>='a') ans[i]+=b[i]-'a'+10; } for(int i=0;i<maxlen;i++){ ans[i+1]+=ans[i]/n; ans[i]=ans[i]%n; } int flag=1; for(int i=maxlen;i>=0;i--){ if(flag&&ans[i]==0) continue; else{ print(ans[i]); flag=0; } } if(flag) printf("0"); puts("\n"); } return 0; }
1005
最强战斗力
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 10 Accepted Submission(s) : 0
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
X战队有N特种作战人员。现在他们空降到了一块地上,刚好他们呈一个圆形的队形排列,收尾相接。现在X战队的大BOSS要从这些队员中挑选一些队员来执行特种作战,这些队员都有一个战斗力参数来代表他们的战斗力,但是,X战队有一个这样的魔咒,如果BOSS挑选队列中相邻的两个队员,这两个队员会产生矛盾,因此不能挑选站在一起的两个队员。现在BOSS要挑选出一只具有最强战斗力的小队,要你编程告诉BOSS最强战斗力最大可能是多少。
Input
有多组测试数据,输入以EOF作为结束。
每组数据的第一行输入N,N<1000。下一行输入N个整数,代表着第i个队员有W的战斗力。注意,第一个队员和最后一个队员是相邻的。
EOF结束,你可以在你的代码中这么写:while(scanf("%d",&n)!=EOF)
Output
输出最强战斗力,具体格式见Sample Output。
Sample Input
3 1 2 3 4 1 2 3 4
Sample Output
Case #1: 3 Case #2: 6
Author
FlushHip
#include <stdio.h> #include <string.h> #define MAX(a,b) ((a)>(b)? (a):(b)) const int M=1000+5; int dp1[M],dp2[M]; int n; int work(int a[]) { int dp[M]; dp[0]=a[0]; dp[1]=MAX(a[0],a[1]); for(int i=2;i<n-1;i++) dp[i]=MAX(dp[i-1],dp[i-2]+a[i]); return dp[n-2]; } int main() { int K=1; while(~scanf("%d",&n)){ memset(dp1,0,sizeof(dp1)); memset(dp2,0,sizeof(dp2)); scanf("%d",&dp1[0]); if(n==1){ printf("Case #%d: %d\n",K++,dp1[0]); continue; } for(int i=1;i<n-1;i++) scanf("%d",&dp1[i]), dp2[i-1]=dp1[i]; scanf("%d",&dp2[n-2]); int ans1=work(dp1); int ans2=work(dp2); printf("Case #%d: %d\n",K++,MAX(ans1,ans2)); } return 0; }
1006
数字整除
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 24 Accepted Submission(s) : 3
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍。当且仅当差是17的倍数时,原数也是17的倍数 。
例如,34是17的倍数,因为3-20=-17是17的倍数;201不是17的倍数,因为20-5=15不是17的倍数。输入一个正整数n,你的任务是判断它是否是17的倍数。
Input
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=10^100),表示待判断的正整数。n=0表示输入结束,你的程序不应当处理这一行。
Output
对于每组测试数据,输出一行,表示相应的n是否是17的倍数。1表示是,0表示否。
Sample Input
34 201 2098765413 1717171717171717171717171717171717171717171717171718 0
Sample Output
1 0 1 0
Author
KZF
#include<stdio.h> #include<algorithm> #include<string.h> #include<math.h> using namespace std; int main() { char a[1000]; memset(a,'0',sizeof(a)); while(~scanf("%s",a)) { int len=strlen(a); if(len==1&&a[0]=='0') return 0; reverse(a,a+len); a[len]='0'; a[len]='0'; int temp=(a[0]-'0')*5; int flag; for(int i=1;i<len;i++){ flag=(a[i]-'0')+(a[i+1]-'0')*10+(a[i+2]-'0')*100; flag=flag-temp; a[i]=flag%10+'0'; a[i+1]=(flag/10)%10+'0'; a[i+2]=flag/100+'0'; temp=(a[i]-'0')*5; } if(flag%17) printf("0\n"); else printf("1\n"); memset(a,'0',sizeof(a)); } return 0; }
另解:(运用的不是题目的中方法,而是同余求模定理)
#include<stdio.h> #include<string.h> int main() { char s[200]; while(scanf("%s", &s) == 1) { if(!strcmp(s, "0")) break; int m = 0; for(int i = 0; i < strlen(s); i++) m = (m*10+s[i]-'0')%17; printf("%d\n", m==0?1:0); } return 0; }
1007
不要落水!
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 26 Accepted Submission(s) : 1
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
有一名自行车竞速爱好者B想围绕一个湖泊进行骑行训练,但是如果稍不注意可能会刹不住车掉进湖泊,于是B想知道这个湖泊有多少个地方会让他在刹不住车的情况下落水。
B现在求助于数学几何能力非常好的你来帮忙,让你编写一个程序找出这些地方的数目。
为便于构造湖泊的地图,每个湖泊将由n个拐角点组成,并且每个拐角一定是直角,如果能够以当前的骑行方向冲出该拐角点,则该拐角点为一个易落水处。
你的导师拥有所有可进行骑行训练的湖泊的地图,为了考验你的几何能力,只给了你一个数据——拐角点的个数。
Input
第一行为测试数据的组数T(T<=500)。
每组测试数据占一行,即拐角点的个数n(4<=n<10000000),所有输入数据都为整数。
Output
每组测试数据输出占一行,输出易落水的结点个数,输出格式见sample output。
Sample Input
1 6
Sample Output
Case #1:1
Author
XC
#include<stdio.h> int main() { int n; int coun=1; scanf("%d",&n); while(n--) { int temp; scanf("%d",&temp); printf("Case #%d:%d\n",coun++,temp/2-2); } return 0; }
这此只是一次小的比赛,希望自己可以再接再厉,能够再更好的平台上面取得更好的成绩
总结比赛之前的种种:
自己在poj水题到两百多,hdu水题六十多道后就不想再继续水题目,而是复习之前自己所写的代码,并且深入理解dp 搜索 的精髓
下面附上一张poj做过的题目集合照,大牛勿笑!!!!
在之前的学习中,枯燥而且相当乏味,只有当A掉一个题目的时候才是自己最开心的时候。能够坚持每天写代码看代码两个小时已属不易啊!!!而我花大量时间在编程上面后,紧接着就是对代码的恶心
所以需要劳逸结合,不能够只是写代码,还应该看点别的书籍,提高自己的精神境界,并且提高自己其他方面的能力。编程不是一蹴而就
但是话又说回来了,算法如果不花大量时间在上面你怎么可能取得好的成绩呢??!!!
比赛中:
自己心态有点不好,开始的时候题目测试有个小问题,交上去一直WA,导致最后半个小时把公式退出来后居然还没有A了那一道题目
因此又一次深刻的理解了,在最后的关头冷静下来才是赢家,这次我认为自己输给了自己