AtCoder Beginner Contest 140
はい。
https://atcoder.jp/contests/abc140
ooox-- 959(-7) ダメです。
A - Password
PyPy3
n=int(input()) print(n**3)
各桁にn通りの数字が使えて3桁分でnの3乗が解に。
B - Buffet
PyPy3
n=int(input()) a=[int(i) for i in input().split()] b=[int(i) for i in input().split()] c=[int(i) for i in input().split()] ans=chk=0 for i in range(n): ans+=b[a[i]-1] if i!=0 and a[i-1]+1==a[i]: ans+=c[a[i-1]-1] print(ans)
多分シミュするしか方法ないと思います。1食ずつi番目の満足度と前回+1番目でないかを確認しながらシミュするしかないと思います。
C - Maximal Value
PyPy3
n=int(input()) b=[int(i) for i in input().split()] a=[0]*n a[0]=b[0] a[-1]=b[-1] for i in range(1,n-1): a[i]=min(b[i],b[i-1]) print(sum(a))
作成する数列のA[1]とA[N]はそのままB[1]とB[N-1]を使います(i番目が問題文は1始まりで、コードは0始まりですけど)。中間は A[i]=min(B[i],B[i-1]) で決めていきます。問題文の数列A,Bの成立条件の式を変形するとそうなるはずです、多分。ソレで作成した数列の総和が解になります。
D - Face Produces Unhappiness
PyPy3
n,k=map(int,input().split()) s=input() t=s[0] c=1 d=[] k*=2 for i in s[1:]: if t!=i and k==0: d.append(c) c=0 elif t!=i: k-=1 t=i c+=1 d.append(c) print(sum(d)-len(d))
時間中にはAC出来ませんでした。色々試すと幸福な人を増やすためには向きが異なっている箇所LR, RLを減らせば成立しそうに見えてきます。サンプルも色々試すとLRを複数跨ぐ長い区間を選ぶ必要は無い気がしてきます。サンプル1も2番目の文字だけ反転させてLLLRRLにするとLLLとRRで幸福は3人です。
先頭から同じ向きの人たちが連続している人数を数えます。 サンプル1の文字列はLRLRRLです、kは2倍にしておきます、
1文字目がLです。
2文字目がRです。操作対象区間開始です。kを1引きます。
3文字目がLです。操作対象区間終了です。kを1引きます。操作対象区間を1回確定させるのにチェック箇所が2回あるのでkが2倍必要です。
4文字目がRです。文字が異なるのですが、操作可能な回数が終わっているのでずっと何も出来ません。
文字列LLLRRLが出来ます。幸福は3人です。