ATCoder ABC 001
题目链接
A 题
太简单了,不放代码了。
B 题
其实,就是模拟,只是需要注意边界问题,是一个左开右闭的区间。
代码:
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
| #include <bits/stdc++.h> using namespace std;
int main() { int m;
cin >> m; if (m == 0) cout << 0 << 0 << endl; else if (m > 0 && m <= 5000) { if (m < 1000) cout << 0 << (10 * m) / 1000 << endl; else cout << (10 * m) / 1000 << endl; } else if (m > 5000 && m <= 30000) cout << m / 1000 + 50 << endl; else if (m > 30000 && m <= 70000) cout << (m / 1000 - 30) / 5 + 80 << endl; else cout << 89 << endl; return (0); }
|
C 题
同样是模拟,只是 else if
的数量有点多,注意边界,同上。
这道题目需要求一个保留两位小数的浮点数,所以需要自己手写函数
Around
。
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
| #include<cstdio> #include<iostream> #include<cstring> #include<cmath>
using namespace std;
double Around(double x,double k){ return floor(pow(10,k)*x+0.5) / pow(10,k); }
int main() { string s; int cmp,meter;double speed,sid; cin>>sid>>meter; speed = meter / 60.0; speed = Around(speed,1); if(sid >= 112.5 && sid <= 337.5) s = "NNE"; else if(sid >= 337.5 && sid < 562.5) s = "NE"; else if(sid >= 562.5 && sid < 787.5) s = "ENE"; else if(sid >= 787.5 && sid < 1012.5) s = "E"; else if(sid >= 1012.5 && sid < 1237.5) s = "ESE"; else if(sid >= 1237.5 && sid < 1462.5) s = "SE"; else if(sid >= 1462.5 && sid < 1687.5) s = "SSE"; else if(sid >= 1687.5 && sid < 1912.5) s = "S"; else if(sid >= 1912.5 && sid < 2137.5) s = "SSW"; else if(sid >= 2137.5 && sid < 2362.5) s = "SW"; else if(sid >= 2362.5 && sid < 2587.5) s = "WSW"; else if(sid >= 2587.5 && sid < 2812.5) s = "W"; else if(sid >= 2812.5 && sid < 3037.5) s = "WNW"; else if(sid >= 3037.5 && sid < 3262.5) s = "NW"; else if(sid >= 3262.5 && sid < 3487.5) s = "NNW"; else s = "N";
if(speed >= 0.0 && speed <= 0.2){printf("C 0\n");return 0;} else if(speed >= 0.3 && speed <= 1.5) cmp = 1; else if(speed >= 1.6 && speed <= 3.3) cmp = 2; else if(speed >= 3.4 && speed <= 5.4) cmp = 3; else if(speed >= 5.5 && speed <= 7.9) cmp = 4; else if(speed >= 8.0 && speed <= 10.7) cmp = 5; else if(speed >= 10.8 && speed <= 13.8) cmp = 6; else if(speed >= 13.9 && speed <= 17.1) cmp = 7; else if(speed >= 17.2 && speed <= 20.7) cmp = 8; else if(speed >= 20.8 && speed <= 24.4) cmp = 9; else if(speed >= 24.5 && speed <= 28.4) cmp = 10; else if(speed >= 28.5 && speed <= 32.6) cmp = 11; else cmp = 12;
cout<<s<<" "<<cmp<<endl; return 0; }
|
D 题
比较简单的思维题。
输入时,注意时间为 5 分钟为增量舍入时间,观察题目发现时间总是从 \(0000 \Rightarrow
9999\)。所以可以想到开一个桶,第 \(i\) 个桶表示第 \(i\)
个时间是否有雨。最后重新遍历一次桶,记录下开始和结束的节点并输入。
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<cstdio> #include<iostream>
using namespace std;
const int maxn = 110000; int g[maxn]; int t;
int main() { cin>>t; for(int i=1;i<=t;i++){ int x,y; scanf("%d-%d",&x,&y); x -= (x%5);y += (5 - y%5) % 5; if(y%100>=60){ y+=100; y-=60; } for(int j=x;j<y;j++) g[j] ++; }
int on=0,be=0; for(int i=0;i<110000;i++){ if(g[i]){ if(!on)be=i; on=1; } else if(on){ printf("%04d-%04d\n",be,i); on=0; } } return 0; }
|