【AtCoder】ABC 449 B - Deconstruct Chocolate

B - Deconstruct Chocolateatcoder.jp favicon

実行時間制限: 2 sec / メモリ制限: 1024 MiB / Difficulty: 45 / NoviSteps: ??? / 配点: 200 点

問題概要

HHWW 列のブロックからなる長方形状のチョコレートがある。

QQ 個のクエリが与えられるので、順に処理せよ。 各クエリは、以下のいずれかの形式である。

  • 1 R: 下 RR 行のチョコレートのブロックの個数を求め、それらを食べる。
  • 2 C: 右 CC 列のチョコレートのブロックの個数を求め、それらを食べる。

なお、クエリを順に処理したとき、各クエリを処理した後もチョコレートは長方形状であり、タイプ 11 のクエリを処理する直前の時点でチョコレートは R+1R + 1 行以上存在し、タイプ 22 のクエリを処理する直前の時点でチョコレートは C+1C + 1 列以上存在することが保証される。

制約

  • 2H,W1002 \leq H, W \leq 100
  • 1Q1001 \leq Q \leq 100
  • タイプ 11 のクエリについて、1R1 \leq R
  • タイプ 22 のクエリについて、1C1 \leq C
  • 入力される値はすべて整数

考察

現在のチョコレートのサイズが h×wh \times w であるとき、

  • クエリ1: RwR w 個のブロックを食べることになり、その後のチョコレートのサイズは (hR)×w(h-R) \times w になる。
  • クエリ2: ChC h 個のブロックを食べることになり、その後のチョコレートのサイズは h×(wC)h \times (w-C) になる。

したがって、クエリを処理するごとに、H,WH, W をそれぞれ更新していけばよい。

実装例

CPP
1.#include <bits/stdc++.h>
2.using namespace std;
3.
4.// ======================================== //
5.
6.int main()
7.{
8. int H, W, Q;
9. cin >> H >> W >> Q;
10.
11. while (Q--)
12. {
13. int t;
14. cin >> t;
15.
16. if (t == 1)
17. {
18. int R;
19. cin >> R;
20.
21. cout << R * W << endl;
22.
23. H -= R;
24. }
25. else
26. {
27. int C;
28. cin >> C;
29.
30. cout << C * H << endl;
31.
32. W -= C;
33. }
34. }
35.
36. return 0;
37.}
Submission #74079632 - AtCoder Beginner Contest 449atcoder.jp favicon

実装時間: 5 分

コメント

ホワイトデーネタでした。