AtCoder Beginner Contest 027

はい。
https://beta.atcoder.jp/contests/abc027

A - 長方形

Python2

l=map(int,raw_input().split())
l.sort()
print [l[0],l[2]][l[1]==l[0]]

ソートしてなんとなく調べる。

B - Cakes and Donuts

Python2

n=int(raw_input())
l=map(int,raw_input().split())
ans=chk=cnt=0
if sum(l)%n!=0:
    print -1
else:
    tmp=sum(l)/n
    for i in l:
        chk+=i
        cnt+=1
        if chk%cnt==0 and chk/cnt==tmp:
            ans+=1
            cnt=chk=0
    print n-ans

数列の総和が長さで割り切れるかが同じ人数にする判定。特定区間ごとにその人数に出来るか調べるのが橋の本数を最小にするための。

C - 倍々ゲーム

Python3

n=int(input())
s=bin(n)[2:]
ans=["Takahashi","Aoki"]
if len(s)%2:
    f=1
    for a,i in enumerate(s):
        if a%2 and i=="0":
            f=0
            break
        elif a!=0 and a%2==0 and i=="1":
            break
    print(ans[f])
else:
    f=0
    for a,i in enumerate(s):
        if a%2 and i=="1":
            break
        elif a%2==0 and i=="0":
            f=1
            break
    print(ans[f])

nを2進数にして長さの偶奇で場合分け。長さ奇数の時には先頭から0始まりで奇数番目の箇所の0を1にするか、偶数番目の箇所の1を0にするかの先に発生したほうで勝敗が決まる。
サンプル2のN=5は長さ3で"101"で先頭から0始まりで奇数番目の0を1にする、2n+1することで青木くんの手番で"11?"になり"101"より大きくなるので高橋くんの勝ちになる。
サンプル3のN=7は長さ3で"111"、1番目は既に1なので高橋君は1が最善手だがまだ勝ちにはならない、2番目は1だが青木君が0にすると"110"となり、"111"より小さい数で(この場合は別に小さくしなくてもいいんですけど)高橋君の番になると長さ4の2進数になってしまうので青木君の勝ち。青木君の0にする想定はあんまり意味がなかったようで、これがもっと長い数列になると高橋君の1にしてくる最善手に負けることになります、多分。