【AtCoder】ABC 443 C - Chokutter Addiction

C - Chokutter Addiction
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
AtCoder
実行時間制限: 2 sec / メモリ制限: 1024 MiB / Difficulty: 150 / NoviSteps: 3Q / 配点: 300 点
問題概要
AtCoder 社は時刻 に始業し時刻 に終業する。 ここで、時刻 と時刻 との間隔は 秒である。
高橋君は AtCoder 社の業務時間中に SNS の chokutter を以下の規則で見る。
- 始業と同時に chokutter を開く。
- 青木君が高橋君のデスクの後ろを通りかかった瞬間に chokutter を開いていた場合、直ちに chokutter を閉じる。
- 高橋君は、 chokutter を時刻 に閉じると、時刻 に必ず chokutter を開く。
始業から終業までに 回青木君が高橋君のデスクの後ろを通りかかっており、そのうち 回目は時刻 であった。 始業から終業までに、高橋君は合計で何秒 chokutter を見ていたか求めよ。
制約
- 入力は全て整数
- 高橋君が chokutter を開いた瞬間に青木君がデスクの後ろを通りかかることはない
考察
この問題は愚直にシミュレーションを行うことで解くことができる。
具体的には、高橋君が chokutter を見ていた総時間 、最後に開いた時刻 , 現在 chokutter を開いているかどうかのフラグ を管理しながら、
- 初期状態 : とする。
- 青木君がやってくるごとに(各 について)、次の処理を行う。
- である場合、ここまでの閲覧時間を記録する。
- とし、 とする。
- 次に chokutter を開く時刻を とする。
- である(終業時刻までにもう一度開くことができる)場合、
- である間 をインクリメントし、閉じている間に青木君がやってきてもスキップする。
- その後、 として、chokutter を再度開く。
- そうでない場合、 とし、 とする。
- である場合、ここまでの閲覧時間を記録する。
- 最後に、 である場合、終業時刻まで閲覧していた時間を記録する。
- とする。
のようにシミュレーションを行えばよい。実装例も参照のこと。
実装例
CPP
1.#include <bits/stdc++.h>2.using namespace std;3. 4.#define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++)5. 6.// ======================================== //7. 8.int main()9.{10. int N, T;11. cin >> N >> T;12. vector<int> A(N);13. rep(i, 0, N) cin >> A[i];14. 15. int ans = 0, last_open_time = 0;16. bool is_open = true;17. rep(i, 0, N)18. {19. if (is_open)20. {21. ans += A[i] - last_open_time;22. is_open = false;23. }24. 25. int next_open_time = A[i] + 100;26. 27. if (next_open_time < T)28. {29. while (i + 1 < N && A[i + 1] < next_open_time)30. {31. i++;32. }33. 34. last_open_time = next_open_time;35. is_open = true;36. }37. else38. {39. last_open_time = T;40. is_open = false;41. }42. }43. 44. if (is_open && last_open_time < T)45. {46. ans += T - last_open_time;47. }48. 49. cout << ans << endl;50. return 0;51.}
Submission #72878222 - Denso Create Programming Contest 2026(AtCoder Beginner Contest 443)
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
AtCoder
実装時間: 5 分
コメント
C問題にしては素直なシミュレーション問題だった。





