初心者のプログラミング日記

プログラミング初心者の日記

プログラミングに関することを書いていきます。

ABC154(A~D)

A - Remaining Balls

https://atcoder.jp/contests/abc154/tasks/abc154_a

S,T=map(str,input().split())
A,B=map(int,input().split())
U=str(input())

if U=="red":
    A-=1
else:
    B-=1
    
print(A,B)

B - I miss you...

https://atcoder.jp/contests/abc154/tasks/abc154_b

S=input()
print("".join("x" for i in range(len(S))))

C - Distinct or Not

https://atcoder.jp/contests/abc154/tasks/abc154_c

N=int(input())
A=list(map(int,input().split()))
B=list(set(A))

if len(A)==len(B):
    print("YES")
else:
    print("NO")

set()で新しく重複した要素を持たないリストを作り、それが元のリストと配列の長さが異なればNoを出力

D - Dice in Line

https://atcoder.jp/contests/abc154/tasks/abc154_d

N,K=map(int,input().split())
P=list(map(int,input().split()))

start=0
ans=0
for i in range(0,len(P)):
    #配列の長さを超さないようにするため
    if start+K>=len(P):
        sum=0
        #print(P[start:])
        for j in P[start:]:
            num=0
            for k in range(1,j+1):
                num+=k
            #それぞれの期待値を足していく
            sum+=num/j
        if sum>ans:
            ans=sum
        break
    else:
        sum=0
        #print(P[start:start+K])
        ##配列のスライス
        for j in P[start:start+K]:
             num=0
             for k in range(1,j+1):
                  num+=k
             sum+=num/j
        if sum>ans:
            ans=sum
    #配列をずらすため1ずつ足していく
    start+=1
    
print(ans)
    

期待値の計算方法は以下の生地参考に
https://www.sist.ac.jp/~kanakubo/research/hosoku/kakuritu_kitaichi.html#:~:text=%E3%82%B5%E3%82%A4%E3%82%B3%E3%83%AD%E3%81%AF%E3%80%81%E5%85%B6%E3%80%851,%E6%95%B0%E5%AD%97%E3%81%AE%E5%B9%B3%E5%9D%87%E3%82%92%E8%80%83%E3%81%88%E3%82%8B%E3%80%82&text=%E6%9C%9F%E5%BE%85%E5%80%A4%E3%81%AF%E3%80%81%E6%88%96%E3%82%8B,%E3%81%9F%E3%82%82%E3%81%AE%E3%81%AE%E7%B7%8F%E5%92%8C%E3%81%A8%E3%81%AA%E3%82%8B%E3%80%82