結果
4完 [A(100), B(200), C(300), D(400)] 57:43 ペナルティ: 0
・順位: 751位 (Rated)
・パフォーマンス: 1466
・Rating変化: 1272 -> 1293 (+21) [Rating最高値]
各問題の解法
A問題 (100点)
提出詳細
計算量 O(1)
int A, B; cin >> A >> B; if (A < 6) B = 0; else if (A < 13) B /= 2; cout << B << endl;
B問題 (200点)
提出詳細
計算量 O(1)
int r, D, x; cin >> r >> D >> x; for (int i = 0; i < 10; i++) { x = x * r - D; cout << x << endl; }
C問題 (300点)
提出詳細
max(Rの最小値 – Lの最大値 + 1, 0)
計算量 O(N)
int N, M, Lmax = -1, Rmin = 100010, L, R; cin >> N >> M; for(int i = 0; i < M ; i++) { cin >> L >> R; Lmax = max(L, Lmax); Rmin = min(R, Rmin); } cout << max(0, Rmin - Lmax + 1) << endl;
D問題 (400点)
提出詳細
Aについては、A[i]と書いたカードが1枚。
B, Cについては、C[i]と書いたカードがB[i]枚あると考える。
カードの数字が大きい順に取っていけばOK.
今回は優先度付きキューを採用したが、vectorに突っ込んでソートしてもOK.
int N, M; cin >> N >> M; std::priority_queue<pair<int, int>> queue; for (int i = 0; i < N; i++) { int A; cin >> A; queue.emplace(A, 1); } for (int i = 0; i < M; i++) { int B, C; cin >> B >> C; queue.emplace(C, B); } long long ans = 0; for (int i = 0; i < N; i++) { auto p = queue.top(); queue.pop(); ans += p.first; if (--p.second > 0) queue.push(p); } cout << ans << endl;
感想
久々のRatedコンテストでした。
+21ということで、まずまずの結果。もうちょっと早く解けたら良かったかな…!