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

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

Codeforces Round #371 (Div.2)

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

A. Meeting of Old Friends

ざっくりと大意

・Sonyaが起きている時間はl1からr1で、kの時はFilyaのためには使えないタイミングである。
・Filyaはl2からr2の間に訪問をして、一緒に過ごせる時間の長さはいくつか。

Python2

l1,r1,l2,r2,k=map(int,raw_input().split())
s=max(l1,l2)
g=min(r1,r2)
print g-s if g>=s and s<=k<=g else g-s+1 if g>=s else 0

つい最近に一度消化してたはずの問題を無駄にWAした。時間が全くダメで0になるパターンも多分あるはず。そうでなければSonyaの起きる時間かFilyaの訪問開始時間の大きい方が一緒に過ごせる時間として期待できる始め、Sonyaが寝始めるかFilyaが訪問を終える時間の小さいほうが一緒に過ごせる時間の終わり。またkがドコにあるかで1加減したりする。

B. Filya and Homework

ざっくりと大意

・数列aに対して特定の数xを用いて全てが同じ数になるように出来るか。
・サンプル1は1を用いて1,5番目に1を加算、2,3番目から1を減算して全てが2になる。

Python2

n=int(raw_input())
#n,k=map(int,raw_input().split())
a=set(map(int,raw_input().split()))
ans=chk=0
if len(a)>3:
    print 'NO'
elif len(a)==3:
    tmp=max(a)-min(a)
    if tmp%2==0 and max(a)-tmp/2 in a and min(a)+tmp/2 in a:
        print 'YES'
    else:
        print 'NO'
elif len(a)<=2:
    print 'YES'

set型にして要素数4以上はNO,要素数3は最大値と最小値の差が偶数で、差を2で割ったものを最小値に加算したものがset型内にあればYES、なければNO。要素数2,1は無条件でYES。当時も今回の再挑戦も要素数2の場合は無条件でYESなのを見落とした。。要素数2だと大きい方に合わせるかでYESになる。中間の数にしようとすると差が奇数だと同じ数に出来ないような判定になってしまうが、どちらかの数に合わせて変更して合わせられる方は何もしなければ数列内がすべて等しい数になる。