大和証券プログラミングコンテスト2023(AtCoder Beginner Contest 331)の解説記事です。
ABC331 A – Tomorrow
問題
問題文の要約は以下の通りです。
問題の要約
1年が \(M\) ケ月、1ケ月が \(D\) 日からなるとき、\(y\) 年 \(m\) 月 \(d\) 日の翌日は何年何月何日か求めよ。
制約
・\(1000 \le y \le 9000\)
・\(1 \le m \le M \le 99\)
・\(1 \le d \le D \le 99\)
・入力は全て整数である
入力
\(M\) \(D\)
\(y\) \(m\) \(d\)
出力
答えの年、月、日を空白区切りで出力せよ。
解説
年末や月末かそれ以外で場合分けを行い、翌日が何年何月何日か求める。
解説
まず入力 \(M\),\(D\) と \(y\), \(m\), \(d\)をint
型として受け取ります。
# 入力
M,D=map(int,input().split())
y,m,d=map(int,input().split())
年末の場合、すなわちd=D
かつm=M
の場合は翌年の1月1日なのでy+1 1 1
を出力します。
月末の場合、すなわちd=D
の場合は翌月の1日なのでy m+1 1
を出力します。
それ以外の場合はy m d+1
を出力します。
# 年末の場合
if d==D and m==M:
print(y+1,1,1)
# 月末の場合
elif d==D:
print(y,m+1,1)
# それ以外
else:
print(y,m,d+1)
解答
# 入力
M,D=map(int,input().split())
y,m,d=map(int,input().split())
# 年末の場合
if d==D and m==M:
print(y+1,1,1)
# 月末の場合
elif d==D:
print(y,m+1,1)
# それ以外
else:
print(y,m,d+1)
ABC331 B – Buy One Carton of Milk
問題
問題文の要約は以下の通りです。
問題の要約
6個で \(S\) 円、8個で \(M\) 円、12個で \(L\) 円で商品が売られているとき、\(N\) 個以上商品を買うために必要な最小の金額を求めよ。
制約
・\(1 \le N \le 100\)
・\(1 \le S, M, L \le 10^4\)
・入力は全て整数
入力
\(N\) \(S\) \(M\) \(L\)
出力
答えを出力せよ。
解説
\(N\) は100個と小さいので6個入り、8個入り、12個入りを幾つずつ買うか全探索する。
解説
6 個入りは最大でN//6+1
つ、8 個入りは最大でN//8+1
つ、12 個入りは最大でN//12+1
つ購入する可能性があるので、これをfor
文で全探索します。
解答
# 入力
N,S,M,L=map(int,input().split())
# 答え(初期値は大きい数にしておく)
ans=10**10
# 6 個入りを何個買うか
for i in range(N//6+2):
# 8 個入りを何個買うか
for j in range(N//8+2):
# 12 個入りを何個買うか
for k in range(N//12+2):
# 合わせて N 個以上か
if 6*i+8*j+12*k>=N:
# 最小金額であれば更新
ans=min(ans,S*i+M*j+L*k)
# 出力
print(ans)