AC:3,WA:3,CE:2,RE:1
レート変化:-25 656
6:34 AC,WA:1
大文字の判定は,issupper関数を使います
#include <iostream> #include <string> using namespace std; int main() { string s; cin >> s; for (char c : s) { if (isupper(c)) { cout << c; } } cout << endl; return 0; }
29:32 AC,WA:2
queueに入れて、取り出せばOKです。
#include <bits/stdc++.h> using namespace std; int main() { int a; cin >> a; queueq; for (int i = 0; i < a; i++) { int op; cin >> op; if (op == 1) { int m; cin >> m; q.push(m); } else if (op == 2) { if (!q.empty()) { cout << q.front() << endl; q.pop(); } } } return 0; }
96:54 AC,WA:1
嫌いなものの個数を数えます。
#include <bits/stdc++.h> using namespace std; int main() { int a, b; cin >> a >> b; unordered_map<int, vector<int>> id_to_event; int n, m; for (int i = 0; i < b; i++) { cin >> n; for (int j = 0; j < n; j++) { cin >> m; id_to_event[m].push_back(i); } } vectorbat(a); vector last_seen_event(b, 0); vector day(a + 1, 0); for (int i = 0; i < a; i++) { cin >> bat[i]; if (id_to_event.count(bat[i])) { for (int j : id_to_event[bat[i]]) { last_seen_event[j] = i; } } } for (int i = 0; i < b; i++) { day[last_seen_event[i]]++; } int cnt = 0; for (int i = 0; i < a; i++) { cout << cnt + day[i] << endl; cnt += day[i]; } return 0; }
コンテスト中は書き終わりませんでした、が5分で解けます(A問題より簡単です)。
全ての直線の組み合わせnP2から平行な直線全ての組み合わせを引けばよいです。
平行な直線はmodで判定できます。
#include <bits/stdc++.h> using namespace std; int main() { int a, b; cin >> a >> b; vectorLine(a, 0); int n, m; for (int i = 0; i < b; i++) { cin >> n >> m; Line[(n + m) % a]++; } long long cnt = (long long)b * (b - 1) / 2; for (auto i : Line) { cnt -= i * (i - 1) / 2; } cout << cnt << endl; return 0; }
PCの充電がなくなり3回ほどシャットダウンされてしまいました。
そのため、スマホのターミナルで解こうとしましたがことごとく失敗しました。
また、D問題から解くべきでした。
過去問のC埋めを続けて行きます。
2025/04/19