AtCoder Beginner Contest 140 過去問 (A~C)
参照
A問題
鬼簡単です。
print(int(input())**3)
B問題
配列がややこしく、
頭が混乱して思ってたより時間がかかってしまいました・・・。
次回から時間を測って、かかった時間をブログに記載していこうと思います。
そうした方がスコア伸びるかな。
n=int(input()) a=list(map(int,input().split())) b=list(map(int,input().split())) c=list(map(int,input().split())) sum_=0 for i,menu in enumerate(a): sum_+=b[menu-1] if i>0: if menu==a[i-1]+1: sum_+=c[menu-2] print(sum_)
C問題
A(N)は未知の配列で、B(N-1)は既知の配列です。
ただし条件として、B(i)≥sum(A(i),A(i+1))の制約があるようです。
自分なりに分かりやすくサンプルパターンを生成してみました。
B 0 153 10 10 23 A 0 0 10 10 10 23 B 0 153 153 00 20 10 10 23 A 0 0 153 00 00 10 10 10 23
眺めてみると、配列の後ろからAの要素を当てはめたほうが良さそうだと思い、
逆算的な発想でアルゴリズムを考えます。
B(i)はA(i)とA(i-1)の最大値とされているので、
A(i)はB(i)とB(i-1)の最小値とする考え方を利用するとうまくいきます。
n=int(input()) b=list(map(int, input().split())) a=[0]*n for j in range(n-1,-1,-1): if j==n-1: a[n-1]=b[j-1] elif j==0: a[0]=b[0] else: a[j]=min(b[j],b[j-1]) print(sum(a))