总结一下5月2日比赛: 除去最强的师哥队,每支队伍都A了6题,但是我们却A了5道。 我赛后总结一下,是真的读不懂题啊。。。
比赛链接
A题
上来顺耳听到是个签到题,一看这不寒假做过的一道差不多的题么。纯粹考察英语,趁着想着点东西赶紧敲。给你一个数字,让你输出对应形式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #include <iostream> #include <algorithm> #include <string> #include <cstring> #include <queue> #include <set> #include <map>hexo using namespace std; int main() { int n; int num; while(cin >> n){ while(n--) { cin >> num; if(num % 10 == 1 && num % 100 != 11) { cout << num << "st" << endl; } else if(num % 10 == 2 && num % 100 != 12) { cout << num << "nd" << endl; } else if(num % 10 == 3 && num % 100 != 13){ cout << num << "rd" << endl; } else{ cout << num << "th" << endl; } } } }
|
B题
输入a b c d e f六个数字,按题目的格式写出来。看看这个形式下的公式是双曲线 还是椭圆 还是抛物线,还是圆。和队友讨论一会,确定绝对正确的答案之后开敲。WA了,想了好一段时间,愣是不知道为什么WA,直到看到 输入的a b c d e f 是实数,我们惊呆了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #include <iostream> #include <algorithm> #include <string> #include <cstring> #include <queue> #include <set> #include <map> #include <stdio.h> #include <math.h> using namespace std; const double eps = 1e-6; int main() { int t; double a,b,c,d,e,f; scanf("%d",&t); while(t--){ cin >> a >>b >>c >> d >> e >> f; if(fabs(a - c) < eps) { printf("circle\n"); } else if((fabs(a*1.0 - 0.0)) < eps || (fabs(c*1.0 - 0.0)) < eps) { printf("parabola\n"); } else if(a * c > 0 ) { printf("ellipse\n"); } else{ printf("hyperbola\n"); } } }
|
D题
模拟题,题目怎么说就怎么做。问题是读不懂啊。能A过的都是神仙QAQ。 题意这里就不列举了。太长了。 不过这道题还是有收获的。 再输出string s 的时候,如果 cout << s << endl 超时 用 cout << s <<
‘\n’ 就过了,一个10ms,一个超时,什么鬼啊。 好吧,看见宝乐总结的了但是没有放在心上,我长记性了QWQ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
| #include <iostream> #include <stdio.h> #include <algorithm> #include <cstring> #include <string> using namespace std; int check(char s) { if(isdigit(s) || isalpha(s)) { return 1; } else return 0; } int change(string &s, int n,int flag,char &ch,int &last) { if(flag == 0) return 0; last = n; if(flag == 1) { s[n] += 1; if(s[n] == 'z' + 1) { s[n] = 'a'; ch = 'a'; return 1; } else if(s[n] == 'Z' + 1) { s[n] = 'A'; ch = 'A'; return 1; } else if(s[n] == '9' + 1) { s[n] = '0'; ch = '1'; return 1; } else{ return 0; } } } int main() { int T, n; string s; cin.tie(0); cout.tie(0); ios::sync_with_stdio(0); cin >> T; while(T--) { cin >> s >> n; while(n--) { int index; int sz = s.size() - 1, i; for(i = sz; i >= 0; --i) { if(check(s[i])) { index = i; break; } } if(i == -1) { s[sz]++; } else { string s1; char ch; int flag = 1,last; while(1) { flag = change(s,index,flag,ch,last); if(!flag) break; for( i = index - 1; i >= 0; --i) { if(check(s[i])) { index = i; break; } } if(i == -1 && flag) { s.insert(s.begin() + last, ch); break; } if(i == -1) { break; } } } cout << s << '\n'; } cout << '\n'; }
}
|
F题
F题是我们过的比较茫然的,题目我们都不太理解,但是其他队伍也都早早A了,而且代码很短,于是我快速按规律敲了一遍,WA了,于是我认为是我的没理解题意导致的,就先放在一边了。后来想到了其中的BUG,人的名字是一个circle,所以还是在茫然的状态下又来了一遍,A了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| #include <iostream> #include <algorithm> #include <string> #include <cstring> #include <queue> #include <set> #include <map> #include <stdio.h> #include <math.h> using namespace std; int main() { int t,n,index; scanf("%d",&t); while(t--){ string s[2001]; string s1; cin >> n >> s1; for(int i = 1; i <= n; ++i) { cin >> s[i]; } for(int i = 1;i <= n; i++) { if(s[i] == s1) { index = i; break; } } int counter = 0; int flag = 0; for(int i = index ; i <= n; ++i) { if(counter == n/2) { flag = 1; cout << s[i] << endl; break; } counter++; } if(!flag) { for(int i = 1; i <= n; ++i) { if(counter == n /2) { cout << s[i] << endl; break; } counter++; } } } }
|
L题
嗯,又是一个类似寒假做过的题目,但是我是真的忘了。队友提出了她的规律公式 f[n] = f[n / 2] + 1, 验证了一下,果然正确,好强大。 问题是n可以达到1e9, 于是我按照这个公式手写了一下前几项,发现其实可以用Log2(n)来计算。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include <iostream> #include <algorithm> #include <string> #include <cstring> #include <queue> #include <set> #include <map> #include <stdio.h> #include <math.h> using namespace std; int main() { int t,n; while(scanf("%d",&t)!= EOF) { while(t--) { cin >> n; int a = (int)log2(n); cout << a + 1 << endl; } } }
|
M题
找中位数的水题,第二道A的题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #include <iostream> #include <algorithm> #include <string> #include <cstring> #include <queue> #include <set> #include <map> #include <stdio.h> using namespace std; int cmp(double a,double b) { return a < b; } int main() { int n; int t; double a[10001]; while(scanf("%d",&t)!=EOF) { while(t--){ cin >> n; for(int i = 1; i <= n; ++i) { scanf("%lf",&a[i]); } sort(a + 1,a + n + 1,cmp); if(n % 2 == 1) { printf("%.3f\n",a[n / 2 + 1]); } else{ printf("%.3f\n",(a[n/ 2] + a[n/2+1])/2.0); } } } }
|