こんばんは、ぱそきいろです。
久々にABC(Atcoder Beginner Contest)301で4完できたので解説を残しておきます。
atcoder.jp
A問題 Overall Winner
よく考えるともっとシンプルにできそうですが、制約がN<100なのでforでぶん回します。
count()を使おうとしたけど勝ち数が同じ場合を考慮しないといけないので・・・
AとTの回数を数えて、N/2を超えると勝ちが決まります。
N=int(input()) S=input() a=0 t=0 for i in range(len(S)): if S[i]=="A": a+=1 if S[i]=="T": t+=1 if a>=(N/2): print("A") exit() if t>=(N/2): print("T") exit()
B問題 Fill the Gaps
これも間を埋めるだけです。
tempに数列Aの値を入れていき、最後に入れたものとの差分をインクリメント(デクリメント)しながらappendしていきます。
N=int(input()) a=list(map(int,input().split())) temp=[] temp.append(a[0]) for i in range(1,len(a)): te=temp[-1] if te>a[i]: for j in range(te-a[i]): temp.append(te-(j+1)) elif te<a[i]: for j in range(a[i]-te): temp.append(te+(j+1)) #temp.append(a[i]) for i in range(len(temp)): print(temp[i],end=" ")
C問題 AtCoder Cards
collections.Counterを使います。
そしてアルファベット26文字で回します。
@は「atcoder」に置き換えられますので、「atcoder」ではなければ数を比較する(ダメならNoで終わる)。
「atcoder」なら@の数を減らしていく。
というのでできます。
atlist=["a","t","c","o","d","e","r"] S=input() T=input() S=collections.Counter(S) T=collections.Counter(T) atS = S["@"] atT = T["@"] for i in range(26): if S[chr(ord("a")+i)]==T[chr(ord("a")+i)]: continue elif chr(ord("a")+i) in atlist: if S[chr(ord("a")+i)]>T[chr(ord("a")+i)]: atT-=(S[chr(ord("a") + i)] - T[chr(ord("a") + i)]) if T[chr(ord("a")+i)]>S[chr(ord("a")+i)]: atS-=(T[chr(ord("a") + i)] - S[chr(ord("a") + i)]) else: print("No") exit() if atT==atS and atT>=0 and atS>=0: print("Yes") else: print("No")
D問題 Bitmask
最初に
「Sの?をすべて1にしてNより小さければその数字が答え」
「Sの?をすべて0にしてNより大きければ-1が答え」
となります。
その後、Sの取りうる値を二分探索すれば答えが出そうです。
一番左の?を1に、それ以外を0してN以下なら1に、N以上なら0に決定。
それを左から順番に?を決めていけば答えが出ます。
S=input() N=int(input()) Stemp = S Stemp2 = Stemp.replace("?", "1") if N >= int(Stemp2,2): print(int(Stemp2, 2)) exit() Stemp2 = Stemp.replace("?", "0") if N < int(Stemp2,2): print(int(-1)) exit() while True: Stemp1=Stemp.replace("?","1",1) Stemp0=Stemp.replace("?","0",1) Stempx=Stemp1.replace("?","0") if N>=int(Stempx,2): Stemp=Stemp1 else: Stemp=Stemp0 if Stemp.count("?")==0: break print(int(Stemp,2))
まとめ
久しぶりの4完でレートが上がりました!
一刻も早く緑に戻りたい・・・