AtCoder Beginner Contest 094/AtCoder Regular Contest 095
はい。
https://atcoder.jp/contests/abc094
A - Cats and Dogs
Python3
a,b,x=map(int,input().split()) print("YES" if x>=a and x<=a+b else "NO")
既にいるA匹の猫とB匹の何かをよしなにしてちょうどX匹に出来るかを確認しました。
B - Toll Gates
Python3
n,m,x=map(int,input().split()) a=[int(i) for i in input().split()] ans=chk=0 for i in a: if i<x: ans+=1 else: chk+=1 print(min(ans,chk))
xから0に行くのと、Nに行くをの両方調べてコストが安いほうが解になる。別々に計算しないでも数列aを先頭から確認すれば大丈夫そう。
C - Traveling Plan
Python3
n=int(input()) x=[int(i) for i in input().split()] if n==2: for i in x[::-1]: print(i) exit() d={} y=sorted(x) ans={} for a,i in enumerate(y): if a<n//2: if i not in ans: ans[i]=y[n//2] elif a>=n//2: if i not in ans: ans[i]=y[n//2-1] for i in x: print(ans[i])
今回の解法ではNが2の場合だけ例外にした。力押しで解決するのに元々の数列Xの順序を壊してしまうので、y=sorted(x)しました。sortedはかなり久しぶりにつかいました。普段は気にせずというか再利用することもないのでx.sort()でえいやっなんですけど。
D - Binomial Coefficients
PyPy3
n=int(input()) a=[int(i) for i in input().split()] a.sort() x=a[-1] ans=[x,0] for i in a: if x>i and abs(x//2-i)<abs(x//2-ans[1]): ans[1]=i if x>i and x%2 and abs((x+1)//2-i)<abs((x+1)//2-ans[1]): ans[1]=i print(ans[0],ans[1])
comb(n,r)が大きくなるためにはnがより大きくて、rはnの1/2に近い数の方がいいはずです。なのでnは数列aの中で最大の数に決めて、rは数列aの中の全部から探しても間に合いそうだったので全部調べました。数列aの制限を見た感じではcomb(n,r)を計算しようとはしないほうがいい気がします。