読者です 読者をやめる 読者になる 読者になる

君はまるで砂漠に咲く、一輪の花。

僕はその花に引き寄せられる蝶。

Codeforces Round #345 (Div.2)

はい。
http://codeforces.com/contest/651

A. Joysticks

ざっくりと大意

・ジョイスティック1つ目の充電状態が\(a_1\)、2つ目のは\(a_2\)である。充電器に繋ぐことが出来るのは1つだけである。
・使っていると充電が2減る。充電してると1増える。どちらかだけでも0になってしまうとゲームが終る。
・充電をやりくりしたときの最大のプレイ時間はいくつか。

Python2

l=map(int,raw_input().split())
ans=chk=0
while 1:
    if min(l)<1 or max(l)<2:
        break
    if l[0]<=l[1]:
        l[0]+=1
        l[1]-=2
        l[0]=min(l[0],100)
    else:
        l[0]-=2
        l[1]+=1
        l[1]=min(l[1],100)
    ans+=1
print ans

適当に少ない方に充電して充電は100まで、使うのにはどちらも2未満になったら終了で大丈夫だと思う。

B. Beautiful Paintings

ざっくりと大意

・数列aを並べ直して \(a_{i+1}\) > \(a_i\)に出来るのは何箇所か??
・サンプル1は10,20,30,40,50にして4箇所。サンプル2は100,200,100,200にして2箇所。

Python2

n=int(raw_input())
#n,k=map(int,raw_input().split())
l=map(int,raw_input().split())
d={}
for i in l:
    if i in d:
        d[i]+=1
    else:
        d[i]=1
l=list(set(l))
l.sort()
l=l[::-1]
ans=chk=0
while 1:
    if len(l)<2:
        break
    tmp=l.pop(0)
    if tmp>l[0]:
        ans+=1
    d[tmp]-=1
    if d[tmp]>0:
        l.append(tmp)
print ans

最小のものとその次に小さいものを探した。特定の値がそれぞれ何個あるかは連想配列で登録。どんな値があるかはリストで管理する。先頭からpopで取り出して1個以上残る場合はappendで末尾に戻して、使い切った場合は戻さない感じにした。

C. Watchmen

ざっくりと大意

ユークリッド距離とマンハッタン距離が等しいペアを探す?
・サンプル2が11にならない気がする、あとで