【AtCoder】ABC341解説(Python)

トヨタ自動車プログラミングコンテスト2024#2(AtCoder Beginner Contest 341)の解説記事です。

目次

ABC341 A – Print 341

問題

問題文の要約は以下の通りです。

問題の要約

\(S\) 個の0 と \(S\) の1からなる、01が交互に並んだ文字列を出力せよ。

制約

・\(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)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次