トヨタ自動車プログラミングコンテスト2024#2(AtCoder Beginner Contest 341)の解説記事です。
目次
ABC341 A – Print 341
問題
問題文の要約は以下の通りです。
問題の要約
\(S\) 個の0
と \(S\) の1
からなる、0
と1
が交互に並んだ文字列を出力せよ。
制約
・\(N\) 整数
・\(1 \le N \le 100\)
入力
\(N\)
出力
答えを出力せよ。
解説
10
を \(N\) 個と1
を結合して出力する。
解説
まず入力 \(N\) をint
型として受け取ります。
# 入力
N=int(input())
10
を \(N\) 個と1
を結合して出力します。
# '10'をN個と'1'を結合して出力
print('10'*N +'1')
解答
# 入力
N=int(input())
# '10'をN個と'1'を結合して出力
print('10'*N +'1')
ABC341 B – Foreign Exchange
問題
解説
国 \(i\) から順に通貨を交換できるだけ交換する操作を行う。
解説\
まず入力 \(N\) をint
型、 \(A_1 A_2 \ldots A_N\) をlist
として受け取ります。
# 入力
N=int(input())
A=list(map(int,input().split()))
国 \(i\) から順に通貨を交換できるだけ交換する操作を行います。
\(S\) 払うと \(T\) 得られるので、A[i]
払うときは、(A[i]
を \(S\)で割った整数部分)×\(T\) 得られます。
# 国iから順に操作を行う
for i in range(N-1):
# 入力
S,T=map(int,input().split())
# 交換できるだけ交換する
A[i+1]+=T*(A[i]//S)
最後に持っている国 \(N\) の通貨を出力します。0-indexed
なのでA[N-1]
を出力します。
# 出力
print(A[N-1])
解答
# 入力
N=int(input())
A=list(map(int,input().split()))
# 国iから順に操作を行う
for i in range(N-1):
# 入力
S,T=map(int,input().split())
# 交換できるだけ交換する
A[i+1]+=T*(A[i]//S)
# 出力
print(A[N-1])
ABC341 C – Takahashi Gets Lost
問題
解説
不時着したマスを全探索し、実際に移動して条件を満たすか判定する。
解説
不時着したマスを全探索し、実際に移動して条件を満たすか判定する。
初期位置や移動先が海の時はスキップして、条件を満たすマスが何マスあるか数えます。
解答
# 入力
H,W,N=map(int,input().split())
T=input()
S=[input() for _ in range(H)]
# 解答(高橋君が現在いるマスとしてあり得るものの個数)
ans=0
# グリッドを全探索
for i in range(H):
for j in range(W):
# 初期位置が海であればスキップ
if S[i][j]=='#':
continue
# 初期位置
x,y=i,j
# 条件を満たすかを判定するフラグ
flag=True
# 順に文字を見て移動する
for t in T:
# 左に移動
if t=='L':
y-=1
# 右に移動
if t=='R':
y+=1
# 上に移動
if t=='U':
x-=1
# 下に移動
if t=='D':
x+=1
# 海であれば条件を満たさない
if S[x][y]=='#':
flag=False
break
# すべて移動して陸であった場合⇒解答に+1
if flag:
ans+=1
# 答えを出力
print(ans)