提出 #59704261
ソースコード 拡げる
"""
<方針>
- シミュレーションはしない.
- 木を収穫するのは最後に回す.
- いもす法を使って,木の高さを構築する.
- 後回しにした分,収穫したかった木の高さ `H` を経過した `T` だけ増やせば問題無い(未来に植えた木は切れないのでOK).
- 木の高さが降順なので,二分探索をする.
- 既に収穫した木は,新しく収穫できないことに注意する.
"""
Q = int(input())
# 木を収穫するとき状況を保存するリスト
whenT = []
# 植物の高さを管理するリスト
plant = []
# 収穫したい木の高さのリスト
H = []
# 入力
for _ in range(Q):
query = list(map(int, input().split()))
match query:
case [1]:
# シミュレーションは後回し.木を植えるだけ.
plant.append(0)
case [2, t]:
# [経過させたい日数, 現在の植木鉢の数(収穫は想定しない), 既に収穫したい回数]
whenT.append([t, len(plant), len(H)])
case [3, h]:
# 収穫したい木の高さ
H.append(h)
# いもす法のための番兵
plant.append(0)
# いもす法のための番兵
H.append(0)
# Hのいもす法は別リストを作成する必要がある.
accH = [0]*len(H)
# いもす法のフラグを埋め込む
for t, p, h in whenT:
# 植物
plant[0] += t
plant[p] -= t
# 収穫
accH[0] += t
accH[h] -= t
# いもす法の累積和
for i in range(len(plant)-1):
plant[i+1] += plant[i]
# いもす法の累積和
for i in range(len(H)-1):
accH[i+1] += accH[i]
# いもす法をした内容を元の収穫したい木の高さに加える.
for i in range(len(H)):
H[i] += accH[i]
# 既に収穫した木の最大index
cut = -1
# 収穫を行う
for h in H[:-1]:
# めぐる式二分探索
ok = -1
ng = len(plant)
while abs(ok-ng)>1:
mid = (ok+ng)//2
if plant[mid] >= h:
ok = mid
else:
ng = mid
# 収穫した木の本数を出力
print(max(ok-cut, 0))
# 収穫した木の最大indexを更新
cut = max(cut, ok)
提出情報
| 提出日時 | |
|---|---|
| 問題 | D - Home Garden |
| ユーザ | mattsunkun |
| 言語 | Python (PyPy 3.10-v7.3.12) |
| 得点 | 400 |
| コード長 | 2176 Byte |
| 結果 | AC |
| 実行時間 | 190 ms |
| メモリ | 109132 KiB |
ジャッジ結果
| セット名 | Sample | All | After Contest | ||||||
|---|---|---|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 400 / 400 | 0 / 0 | ||||||
| 結果 |
|
|
|
| セット名 | テストケース |
|---|---|
| Sample | 00_sample_00.txt, 00_sample_01.txt |
| All | 00_sample_00.txt, 00_sample_01.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 01_random_20.txt, 01_random_21.txt, 01_random_22.txt, 01_random_23.txt, 01_random_24.txt, 02_hand_00.txt, 02_hand_01.txt, 02_hand_02.txt |
| After Contest | 03_after_contest_00.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00_sample_00.txt | AC | 64 ms | 76284 KiB |
| 00_sample_01.txt | AC | 64 ms | 76276 KiB |
| 01_random_00.txt | AC | 154 ms | 90164 KiB |
| 01_random_01.txt | AC | 178 ms | 95800 KiB |
| 01_random_02.txt | AC | 165 ms | 92688 KiB |
| 01_random_03.txt | AC | 148 ms | 89892 KiB |
| 01_random_04.txt | AC | 118 ms | 85808 KiB |
| 01_random_05.txt | AC | 167 ms | 93096 KiB |
| 01_random_06.txt | AC | 114 ms | 84944 KiB |
| 01_random_07.txt | AC | 142 ms | 89204 KiB |
| 01_random_08.txt | AC | 113 ms | 85200 KiB |
| 01_random_09.txt | AC | 98 ms | 83892 KiB |
| 01_random_10.txt | AC | 138 ms | 87976 KiB |
| 01_random_11.txt | AC | 112 ms | 84848 KiB |
| 01_random_12.txt | AC | 174 ms | 95760 KiB |
| 01_random_13.txt | AC | 173 ms | 94872 KiB |
| 01_random_14.txt | AC | 120 ms | 85588 KiB |
| 01_random_15.txt | AC | 123 ms | 86584 KiB |
| 01_random_16.txt | AC | 114 ms | 84816 KiB |
| 01_random_17.txt | AC | 167 ms | 92780 KiB |
| 01_random_18.txt | AC | 130 ms | 87372 KiB |
| 01_random_19.txt | AC | 164 ms | 93048 KiB |
| 01_random_20.txt | AC | 174 ms | 95120 KiB |
| 01_random_21.txt | AC | 173 ms | 95012 KiB |
| 01_random_22.txt | AC | 174 ms | 95164 KiB |
| 01_random_23.txt | AC | 174 ms | 95140 KiB |
| 01_random_24.txt | AC | 172 ms | 95064 KiB |
| 02_hand_00.txt | AC | 165 ms | 94416 KiB |
| 02_hand_01.txt | AC | 190 ms | 108636 KiB |
| 02_hand_02.txt | AC | 189 ms | 109132 KiB |
| 03_after_contest_00.txt | AC | 177 ms | 99784 KiB |