日本レジストリサービス(JPRS)プログラミングコンテスト2024(AtCoder Beginner Contest 339)の解説記事です。
ABC339 A – TLD
問題
問題文の要約は以下の通りです。
問題の要約
英小文字と.
のみからなる文字列 \(S\) が与えられるので最後の.
以降の文字列を出力せよ。
制約
・\(S\) は英小文字と .
からなる、長さ2以上100以下の文字列
・\(S\) には .
が1つ以上含まれる
・\(S\) の末尾は.
ではない
入力
\(S\)
出力
答えを出力せよ。
解説
入力の文字列を.
で分割してリストに変換し、リストの最後の文字列を出力します。
解説
\(S\) を文字列して受け取ります。
# 入力
s=input()
入力の文字列を.
で分割してリストに変換します。
# 入力を'.'で分割してリストに変換
s=list(s.split('.'))
リストの最後の文字列を出力します。リストの最後の要素はs[-1]
と表すことができます。
# リストの最後の文字列を出力
print(s[-1])
解答
# 入力
s=input()
# 入力を'.'で分割してリストに変換
s=list(s.split('.'))
# リストの最後の文字列を出力
print(s[-1])
入力から出力まで、1行で書くこともできます。
print(list(input().split('.'))[-1])
ABC339 B – Langton’s Takahashi
問題
解説
実際にシミュレーションを行う。
解説
\(H, W, N\) をint
型して受け取ります。
# 入力
H, W, N = map(int, input().split())
白で初期化されたグリッドgrid
を用意します。
# 白で初期化されたグリッド
grid = [['.' for _ in range(W)] for _ in range(H)]
方向と位置の変数を用意して初期化します。
方向は0: 上, 1: 右, 2: 下, 3: 左
で表します。
# 初期方向
direction = 0 # 0: 上, 1: 右, 2: 下, 3: 左
# 初期位置
x, y = 0, 0
方向0: 上, 1: 右, 2: 下, 3: 左
に向いたときに1マス進むことを表す移動ベクトルdx
, dy
を用意します。
# 移動ベクトル (上, 右, 下, 左)
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
\(N\) マス進むシミュレーションをします。
現在のマスの色を変え、向きを変え、1マス進む操作を \(N\) 回繰り返します。1マス進む操作はグリッドがトーラス状なので余りを求めます。
for _ in range(N):
# 現在のマスの色を変える
if grid[x][y] == '.':
grid[x][y] = '#'
direction = (direction + 1) % 4 # 時計回りに90度回転
else:
grid[x][y] = '.'
direction = (direction - 1) % 4 # 反時計回りに90度回転
# 1マス進む
x = (x + dx[direction]) % H
y = (y + dy[direction]) % W
最後にグリッドの色を出力します。
# グリッドを出力
for g in grid:
print(''.join(g))
解答
# 入力
H, W, N = map(int, input().split())
# 白で初期化されたグリッド
grid = [['.' for _ in range(W)] for _ in range(H)]
# 初期方向
direction = 0 # 0: 上, 1: 右, 2: 下, 3: 左
# 初期位置
x, y = 0, 0
# 移動ベクトル (上, 右, 下, 左)
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
for _ in range(N):
# 現在のマスの色を変える
if grid[x][y] == '.':
grid[x][y] = '#'
direction = (direction + 1) % 4 # 時計回りに90度回転
else:
grid[x][y] = '.'
direction = (direction - 1) % 4 # 反時計回りに90度回転
# 1マス進む
x = (x + dx[direction]) % H
y = (y + dy[direction]) % W
# グリッドを出力
for g in grid:
print(''.join(g))
ABC339 C – Perfect Bus
問題
解説
最初の乗客数を0人として乗降客数の変動をシミュレーションする。
解説
入力を受け取ります。
# 入力
N=int(input())
A=list(map(int,input().split()))
最初の乗客数と現在の乗客数を表す変数を用意して0で初期化します。
# 最初の乗客数
first=0
# 現在の乗客数
now=0
停車時の乗降客数の変動を現在の乗客数now
に加えます。もし現在の乗客数が 0 未満になったときは、マイナスになった人数が最初の乗っていた乗客first
とします。
for i in range(N):
# 停車時の乗降客数の変動を加える
now+=A[i]
# もし現在の乗客数が 0 未満のとき
if now<0:
# マイナスになった人数が最初の乗っていた乗客とする
first=max(first,-now)
最初の乗客数+現在の乗客数が答えになります。
# 最初の乗客数+現在の乗客数が答え
print(first+now)
解答
# 入力
N=int(input())
A=list(map(int,input().split()))
# 最初の乗客数
first=0
# 現在の乗客数
now=0
for i in range(N):
# 停車時の乗降客数の変動を加える
now+=A[i]
# もし現在の乗客数が 0 未満のとき
if now<0:
# マイナスになった人数が最初の乗っていた乗客とする
first=max(first,-now)
# 最初の乗客数+現在の乗客数が答え
print(first+now)