比赛链接
5月4日比赛总结:各种纠结,各种WA。共A了4题,赛后又补了1道,也是因为细节问题,赛中没有过。
A题
告诉你出行的两种方式,就是日常中的出租车,起步价多少钱,超过几公里多少钱,然后让你求两种方式的差价是多少。关键问题在于要四舍五入。第一次WA是忘记返回double, 第二次WA是因为不是最终的答案四舍五入,而是说两种方式的答案分别进行四舍五入,再求差值(队友点睛之笔)。
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
| #include <iostream> #include <stdio.h> #include <cmath> #include <algorithm> #include <set> #include <string> #include <cstring> #include <queue> #include <map> #include <vector> using namespace std; typedef long long ll; double jisuan1(int n,int wait) { double sum = 0; if(n <= 3) return 10; if(n > 3 && n <= 10) { return 10 + (n - 3)*2; } if( n > 10) { return 24 + (n - 10)*3; } } double jisuan2(int n ,int wait) { double sum = 0; if(n <= 3) return 11.0; if(n > 3 && n <= 10) { return 11.0 + (n - 3)*2.5; } if( n > 10) { return 28.5 + (n - 10)*3.75; } } int main() { int t; int n,wait; scanf("%d",&t); while(t--) { scanf("%d %d",&n,&wait); double a = jisuan1(n,wait); a += 0.4 * wait + 1; double b = jisuan2(n,wait); b += 0.625 * wait; if(b - int(b) >= 0.5) { b = ceil(b); } else{ b = floor(b); } if(a - int(a) >= 0.5) { a = ceil(a); } else{ a = floor(a); } cout << b- a << endl; } }
|
B题
一度写的崩溃,本来写完了,后来发现我理解错了题,交上去WA了, 发现是n == 1的时候没有处理好,再交,AC。
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
| #include <iostream> #include <stdio.h> #include <cmath> #include <algorithm> #include <set> #include <string> #include <cstring> #include <queue> #include <map> #include <vector> using namespace std; typedef long long ll; int main() { int t; cin >> t; int vis[13]; int n; while(t--) { vector<char>V[21]; scanf("%d",&n); string s[21]; cin >> s[0]; for(int i = 0; i < 12; ++i) { V[0].push_back(s[0][i]); } if(n == 1) { sort(s[0].begin(),s[0].end()); cout << s[0] << '\n'; continue; } memset(vis,0,sizeof(vis)); for(int i = 1; i < n; ++i) { cin >> s[i]; memset(vis,0,sizeof(vis)); for(int j = 0; j < s[i].size(); ++j) { for(int k = 0; k < V[i - 1].size(); ++k) { if(s[i][j] == V[i - 1][k] && !vis[k]) { vis[k] = 1; V[i].push_back(s[i][j]); break; } } } } string s3; for(int i = 0; i < V[n - 1].size(); ++i) { s3 += V[n-1][i]; } sort(s3.begin(),s3.end()); cout << s3; cout << '\n'; } }
|
H题
一个女孩,非常懒惰,喜欢睡觉,套用高中级部主任的话: 喜欢睡,回家睡去,然后她要卖东西给顾客,输入的是: 从第i个顾客获得利益,以及第i个顾客几分钟之后来。 现在让你求最大的平均利润,以及该利润下的最小的睡眠时间(为什么说最小呢,因为最大的平均利润可能有好几种情况),与队友已经讨论的很明白了,发现题目也并不难,但是后来才知道我们忽略了一个问题,也是网上很多人也犯得错误。 就是这句话:
1
| if(i < n && t[i] + Max[i] >= t[i + 1]) continue;
|
我们只考虑了他在这种情况下可以卖给前i个人的最大平均利益,但是忘记了也要保证在此状态下,他必须在第i + 1个人来之前睡着,如果不能睡着的话,此状态不成立。
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
| #include <iostream> #include <stdio.h> #include <cmath> #include <algorithm> #include <set> #include <string> #include <cstring> #include <queue> #include <map> #include <vector> #include <cmath> using namespace std; const double inf = 0x3f3f3f3f; int main() { int T,n; double tt[1001],sump[1001],Max[1001],t[1001],p[1001]; scanf("%d",&T); while(T--) { scanf("%d",&n); sump[0] = 0; for(int i = 1; i <= n; ++i) { scanf("%lf",&p[i]); sump[i] = sump[i - 1] + p[i]; } tt[0] = 0; Max[0] = -1; for(int i = 1; i <= n; ++i) { scanf("%lf",&t[i]); tt[i] = t[i] - t[i - 1]; Max[i] = max(Max[i - 1], tt[i]); } double v[1001]; double miner = -1.0; double miner1 = inf; for(int i = 1; i <= n; ++i) { v[i] = sump[i] / (i * 1.0); if(i < n && t[i] + Max[i] >= t[i + 1]) continue; if(v[i] >= miner) { miner = v[i]; } } for(int i = 1; i <= n; ++i) { if(v[i] == miner) { if(i < n && t[i] + Max[i] >= t[i + 1]) continue; if(Max[i] < miner1) { miner1 = Max[i]; } } } printf("%.6f %.6f\n",miner1,miner); } }
|
J题
求逆元模板,最让我们崩溃的题目,开场一出题,我直接开A这道,好兴奋啊,模板上去,第一个A完就行。嗯 ,就这样直到比赛剩下不到一个小时,我真的是最后一个A过去的QAQ。而且最后过的还是用的暴力,没用模板,因为此题的数据范围很小。我和队友一直在讨论拓展欧几里得的模板为什么不行,各种样例都试了。在比赛的最后几分钟,我想起来了一个问题。题目要求的是 (a * x) % m == 1 % m , 在我的思想中,包括师哥在讲的时候,我始终认为右边的 % m是无关紧要的。因为我认为 1 % m 都为 1,直到遇到这个题,我想到如果m == 1,其实就是让你求 (a * x) % 1 == 0 了 那么 x == 1 ,需要单独把这个样例特判一下就过了。看来主观臆断害人不浅。中间WA了大于3到4次还是因为 Exist 没有大写,我和队友都惊呆了。
代码1:
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
| #include <iostream> #include <stdio.h> #include <cmath> #include <algorithm> #include <set> #include <string> #include <cstring> #include <queue> #include <map> #include <vector> using namespace std; int extend(int a,int b,int &x, int &y) {
if(b == 0) { x = 1; y = 0; return a; } int d = extend(b, a % b,x,y); int t = x; x = y; y = t - a/b*y; return d; } int mod(int a,int n) { int x,y; int d = extend(a,n,x,y); if(d == 1)return (x % n + n)% n; else return -1; } int main() { int t; int a,n; cin >> t; while(t--) { cin >> a >> n; if(n == 1) { cout << 1 << '\n'; continue; } int c = mod(a,n); if(c <= 0) { cout << "Not Exist" << '\n'; } else cout << c << '\n'; } }
|
代码2:
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 <stdio.h> #include <cmath> #include <algorithm> #include <set> #include <string> #include <cstring> #include <queue> #include <map> #include <vector> #include <cmath> using namespace std; int main() { int t, i, a, m; scanf("%d",&t); while(t--) { scanf("%d %d",&a,&m); int flag = 0; for( i = 1; i <= 10000; ++i) { if((a * i) % m == (1 % m)) { flag = 1; printf("%d\n",i); break; } } if(!flag) { printf("Not Exist\n"); } } }
|
K题
签到题目,题目挺长的。
说的是一男一女完猜拳的游戏。他们一开始约定好都出相同的姿势,但是男孩想赢,女孩想输,现在给你男,女的名字,以及他们开始约定好的出的姿势。问最后谁会赢。
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 <stdio.h> #include <cmath> #include <algorithm> #include <set> #include <string> #include <cstring> #include <queue> #include <map> #include <vector> using namespace std; int main() { int t, n; string s,s1,s2; scanf("%d",&t); while(t--) { cin >> s >> s1 >> s2; cout << s1 << " will survive" << '\n';
} }
|