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人です。