結果
| 問題 | No.3745 Line Seats |
| ユーザー |
|
| 提出日時 | 2026-09-22 12:25:42 |
| 言語 | Python3 (3.14.7 + numpy 2.5.2 + scipy 1.18.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 39 ms / 2,000 ms |
| + 889µs | |
| コード長 | 1,410 bytes |
| 記録 | |
| コンパイル時間 | 63 ms |
| コンパイル使用メモリ | 15,232 KB |
| 実行使用メモリ | 12,672 KB |
| 最終ジャッジ日時 | 2026-09-23 12:30:28 |
| 合計ジャッジ時間 | 3,930 ms |
|
ジャッジサーバーID (参考情報) |
judge4_0 / judge1_0 |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| 部分点 | 20 % | AC * 47 |
| 満点 | 80 % | AC * 60 |
| 合計 | 2 * 100% = 200 点 |
ソースコード
# gemini-3.5-flash-lite
def solve():
import sys
input = sys.stdin.read
data = input().split()
if not data:
return
N = int(data[0])
S = data[1]
# 1-indexed で扱いやすくするために先頭にダミー文字を入れる
S = "_" + S
left_dist = [float('inf')] * (N + 1)
right_dist = [float('inf')] * (N + 1)
# 1. 左から走査
last_person = -float('inf')
for i in range(1, N + 1):
if S[i] == '#':
last_person = i
left_dist[i] = i - last_person
# 2. 右から走査
last_person = float('inf')
for i in range(N, 0, -1):
if S[i] == '#':
last_person = i
right_dist[i] = last_person - i
# 3 & 4. 各空席について最も近い人までの距離の最大値を求める
max_min_dist = -1
best_seat = -1
for i in range(1, N + 1):
if S[i] == '.':
# 左右の近い方の距離
current_min_dist = min(left_dist[i], right_dist[i])
# 最大値を更新(同点の場合はより左側の席を優先するため、厳密に大きい場合のみ更新)
if current_min_dist > max_min_dist:
max_min_dist = current_min_dist
best_seat = i
print(best_seat)
if __name__ == '__main__':
solve()