Codeforces Round #811 (Div. 3)
A. Everyone Loves to Sleep
思路:
把所有的时间都换成分钟,先记录一下当前的时间,然后依次读入每个闹钟的时间,其中每个闹钟的时间减去现在的时间差值最小的就是答案,注意如果差值小于0说明到第二天了,就要加上24小时
#include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int, int> PII; const int N = 15; int a[N]; void solve() { int n, h, m; cin >> n >> h >> m; int time = h * 60 + m; int res = 0x3f3f3f3f; for (int i = 1; i <= n; i ++ ) { int hh, mm; cin >> hh >> mm; int t = hh * 60 + mm - time; if(t < 0) t += 24 * 60; res = min(res, t); } cout << res / 60 << ' ' << res % 60 << endl; } int main() { int T = 1; cin >> T; while(T -- ) { solve(); } return 0; }
B. Remove Prefix
思路:
因为只能删最左边的,所以我们从最右边开始看,只要遍历到左边一个和右边有的数那左边的数就都要删去
#include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int, int> PII; const int N = 200010; int a[N]; void solve() { int n; cin >> n; set<int> s; for (int i = 1; i <= n; i ++ ) cin >> a[i]; for (int i = n; i >= 1; i -- ) { if(s.count(a[i])) { cout << i << endl; return; } s.insert(a[i]); } cout << 0 << endl; } int main() { int T = 1; cin >> T; while(T -- ) { solve(); } return 0; }
C. Minimum Varied Number
思路:
如果我们从1到9开始枚举的话不能保证是最小的,所以我们可以从9到1枚举,这样最后得到的会是最大值,然后reverse一下就是最小值
#include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int, int> PII; const int N = 200010; int a[N]; void solve() { int n; cin >> n; string s; for(int i = 9; i >= 1; i -- ) if(n - i >= 0) { n -= i; s += i + '0'; } reverse(s.begin(), s.end()); cout << s << endl; } int main() { int T = 1; cin >> T; while(T -- ) { solve(); } return 0; }