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

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

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

Codeforces Round #331 (Div.2)

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

A. Wilbur and Swimming Pool

ざっくりと大意

・座標がn箇所与えられる。それらの座標で作成する長方形が1つに定まればその面積を、そうでなければ-1を出力。
・長方形は辺がx軸、y軸に平行になるもののみが対象。

方針のようなもの

・強引になんとかする。

python

def niten(a,b): return abs(a-b) if a>=0 and b>=0 else  a+abs(b) if a>=0 else abs(a)+b if b>=0 else abs(abs(a)-abs(b))

n=int(raw_input())
if n==1:
    print -1
elif n==2:
    a,b=map(int,raw_input().split())
    c,d=map(int,raw_input().split())
    if a==c or b==d:
        print -1
    else:
        print abs(max(a,c)-min(a,c))*abs(max(b,d)-min(b,d))
elif n==3:
    l=[]
    for i in range(3):
        l.append(map(int,raw_input().split()))
    l.sort()
    if l[0][0]==l[1][0] and (l[1][1]==l[2][1] or l[0][1]==l[2][1]):
        x=niten(l[0][0],l[2][0])
        y=niten(l[0][1],l[1][1])
    elif l[1][0]==l[2][0] and (l[0][1]==l[1][1] or l[0][1]==l[2][1]):
        x=niten(l[0][0],l[2][0])
        y=niten(l[1][1],l[2][1])
    else:
        x,y=1,-1
    print x*y
else:
    l=[]
    for i in range(4):
        l.append(map(int,raw_input().split()))
    l.sort()
    if l[0][0]==l[1][0] and l[2][0]==l[3][0] and l[0][1]==l[2][1] and l[1][1]==l[3][1]:
        x=niten(l[0][0],l[2][0])
        y=niten(l[0][1],l[1][1])
    else:
        x,y=1,-1
    print x*y

座標が1点だと定まらないので-1。2点でx,yどちらかの座標が共通だと-1、そうでなければx座標の差とy座標の差で面積が求まる。3,4点場合には座標をソートすると共通になる座標と差がある座標の出現に法則?があるのでそれで判定する。

B. Wilbur and Array

ざっくりと大意

・問題文が解読できない。

方針のようなもの

・そうだ、パクろう。。

python

n=int(raw_input())
l=map(int,raw_input().split())
ans=chk=0
for i in l:
    ans+=abs(chk-i)
    chk=i
print ans

最初は\(a_0\)の値をそのまま解に加算、以降は数列aの中の一つ前の値との差の絶対値を加算していく。問題文が解読できてないけど。