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

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

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

Codeforces Round #229 (Div. 2)

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

A. Inna and Alarm Clock

ざっくりと大意

・Innaは睡眠が大好きで寝室は100*100の広さで座標は左下の原点が(0,0)で右上が(100,100)である。
・n個の目覚まし時計を様々な座標のトコに配置している。
・とある垂直or水平方向の一直線上の目覚まし時計を纏めて止めることが出来る。
・座標は101*101通りしか無いはずなのに目覚まし時計は最大105個らしい。よくわからん。。。

方針のようなもの

・水平か垂直で同じ座標の多いものから消せばいいと思ったけどサンプルの3を見たらそういう話でもないっぽいので後で。

B. Inna, Dima and Song

ざっくりと大意

・Innaがピアノを弾いてDimaがギターを弾く。そしてDimaは一緒に演奏するための歌を書いた。Serejaはソレを聴いてみたい。
・彼らは最大音量\(a_i\)で演奏が出来て、音量が\(b_i\)と等しく出来ればInnaとDimaの音量の積の分だけSerejaは満足度を得る。出来なければ満足度は-1される。
・サンプルの1は1列目は2人とも音量1でぴったり音量2になり満足度11を得る、2列目も同様に11を得る。3列目が音量1と音量2で音量3を出して1*2の満足度を得て合計4の満足度になる。

方針のようなもの

・\(a_i\)*2>=\(b_i\)なら音量をぴったり調整することが出来る。偶数なら2で割ったものの積、奇数なら2で割ったものに片方は1を足して積を加算していく。調整できない場合は-1する。

n=int(raw_input())
a=map(int,raw_input().split())
b=map(int,raw_input().split())
ans=0
for i in range(n):
    if a[i]*2>=b[i] and b[i]>1:
        ans+=(b[i]/2)*(b[i]-b[i]/2)
    else:
        ans-=1
print ans

\(b_i\)が1の時は満足度0ではなく-1になるらしい。。あと偶数なら奇数ならで積を最大にするのには偶数奇数の判定をしなくても(b[i]/2)*(b[i]-b[i]/2)で勝手に後側の数字の方が調整される。