ABC255 A-問題
問題文
整数 R,C と 2 行 2 列からなる行列 A が与えられるので、 A[R][C]を出力してください。
ポイント
入力される値を二次元配列に格納する記述を覚える
255A.py
R,C = map(int,input().split())
# 二次元配列で受け取る
# (入力例)
# 90 80
# 70 60
A = [ list(map(int, input().split())) for i in range(2) ]
# A: [[90, 80], [70, 60]]
# インデックスなので -1
R -= 1
C -= 1
print(A[R][C])
ABC254 B-問題
ポイント
動的計画法を用いる
254B-1.py
# DP 動的計画法で解く
N = int(input())
ans = [1]
for _ in range(N):
print(*ans)
# DP に格納する
dp = [0] * (len(ans) + 1)
for i in range(len(ans)):
dp[i] += ans[i]
dp[i + 1] += ans[i]
ans = dp
254B-2.py
# N * N の二次元配列で解く
N = int(input())
# 二次元配列を作る
A = [[0] * N for i in range(N)]
for i in range(N):
for j in range(i+1):
# 条件1 j=0 または j=i の時、a i,j = 1
if j == 0 or j == i:
A[i][j]=1
# 条件2 それ以外
else:
A[i][j] = A[i-1][j-1] + A[i-1][j]
for i in range(N):
# A[i]の0~i番目までを出力
print(*A[i][:i + 1])
ABC295 C-問題
問題文
N 枚の靴下があります。i 枚目の靴下の色は Aiです。
あなたは以下の操作をできるだけ多い回数行いたいです。最大で何回行うことができますか?
・まだペアになっていない靴下の中から同じ色の靴下を2 枚選んでペアにする。
ポイント
defaultdict を活用して靴下の各色の枚数を格納する
295C.py
from collections import defaultdict
N = int(input())
A = list(map(int, input().split()))
# 辞書を用意する
dic = defaultdict(int)
# 各色をカウントしていく
for i in range(N):
color = A[i]
dic[color] += 1
ans = 0
# 各色を 2で割った答えを加算する
for color in dic:
ans += dic[color] // 2
print(ans)