ABC141(A~D)
A - Weather Prediction
https://atcoder.jp/contests/abc141/tasks/abc141_a
かかった時間 1分30秒
S=str(input()) if S=="Sunny": print("Cloudy") elif S=="Cloudy": print("Rainy") else: print("Sunny")
B - Tap Dance
https://atcoder.jp/contests/abc141/tasks/abc141_b
かかった時間 6分
S=str(input()) for i in range(len(S)): if i%2==0: if S[i]=="L": print("No") exit() else: if S[i]=="R": print("No") exit() print("Yes")
C - Attack Survival
https://atcoder.jp/contests/abc141/tasks/abc141_c
かかった時間 20分
N,K,Q=map(int,input().split()) List=[K for i in range(N)] for i in range(Q): A=int(input()) for i in range(N): if i+1==A: continue else: List[i]=List[i]-1 for i in List: if i<=0: print("No") else: print("Yes")
最初に書いたコードはこれだったが、なんかTLEになりそうだったので、下記のコードに書き直した。
N,K,Q=map(int,input().split()) #正解数 num=[0 for i in range(N)] for i in range(Q): A=int(input()) num[A-1]=num[A-1]+1 z=sum(num) for i in range(N): #個人の得点は最初の得点-(全体の正解数-自分の正解数)で求められる if K-(z-num[i])<=0: print("No") else: print("Yes")
そもそも、一回ずつ点数を引いていくのは効率が悪いので、正解数のリストを用意して、そこから得点を求める方がはやそうだったのでそうした。
初めて計算量について考えた。
D - Powerful Discount Tickets
https://atcoder.jp/contests/abc141/tasks/abc141_d
かかった時間 15分
N,M=map(int,input().split()) A=list(map(int,input().split())) New=sorted(A, reverse=True) while M!=0: New[0]=New[0]//2 M-=1 New=sorted(New, reverse=True) print(sum(New))
割引券は1番値段が高い商品に使えばいいので、最初にNewというAを降順にしたリストを用意する。
その後、while文で割引券がなくなるまで、New[0]を割引し、NewにNewを降順にソートしたリストを格納する。
heapqというライブラリを使うとはやいらしいです。
https://qiita.com/ell/items/fe52a9eb9499b7060ed6