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

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

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

Codeforces Round #261 (Div. 2)

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

A. Pashmak and Garden

ざっくりと大意

・与えられる\(x_1\),\(y_1\),\(x_2\),\(y_2\)の座標と正方形になるような、\(x_3\),\(y_3\),\(x_4\),\(y_4\)を出力する。
・該当する座標が複数あるならばどれか1つ、そのような座標がなければ-1を出力。なお最初に与えられる座標は同じ位置でないことが保証される。

Python2

x1,y1,x2,y2=map(int,raw_input().split())
if x1==x2:
    y=abs(y1-y2)
    if x1+y<=1000 and x2+y<=1000:
        print x1+y,y1,x2+y,y2
elif y1==y2:
    x=abs(x1-x2)
    if y1+x<=1000 and y2+x<=1000:
        print x1,y1+x,x2,y2+x
else:
    if abs(x1-x2)!=abs(y1-y2):
        print -1
    else:
        print x1,y2,x2,y1

xかyの座標が共通していたらx軸y軸と水平垂直な一辺なので問題の正方形は必ず作れる。正方形を作る向きによっては制限の範囲をはみ出すかもしれないので、そしたらば反対側に形を作れば良い。x,yのどちらも共通していなかったら対角線になる座標の関係なのでx同士とy同士の差分が等しければ正方形が作れる、そうでなかったら長方形になるので-1。

B. Pashmak and Flowers

ざっくりと大意

・美しさの\(b_i\)の差が最大となるような組み合わせが幾つあるか??

Python2

n=int(raw_input())
l=map(int, raw_input().split())
d={}
for i in l:
    if i in d:
        d[i]+=1
    else:
        d[i]=1
l.sort()
if len(d)!=1:
    print l[-1]-l[0],d[l[-1]]*d[l[0]]
else:
    print 0,max(1,d[l[0]]*(d[l[0]]-1)/2)

美しさの差が最大になるのは数列bの最大値と最小値で決まる。最大値と最小値が異なれば最大値、最小値の差とそれぞれの個数の積が解。同じ値ならば差が0で組み合わせ数はnC2になる。