Codeforces Round #120 (Div.2)
はい。
http://codeforces.com/contest/190
A. Vasya and the Bus
greedy,math
ざっくりと大意
・Bertownのバス62号車はn人の大人とm人の子どもを乗せて出発した
・Vasyaは会計士でお金を数えるのが好きで乗客の支払いの合計の最大と最小に興味がある???
・運賃は大人も子供も共通で1ruble
・大人(1人?)と一緒に乗ると子どもは1人は無料で乗ることが出来る
・サンプル1は大人1人子ども2人の組しかないかな??それで料金は2ruble
・サンプル2は子どものみなのでImpossible
・サンプル3は 大人2人子ども2人なので、大人1人子ども1人を2組で2rubleが最小。大人1人子ども2人と大人1人で3rubleが最大
方針のようなもの
・最大は大人の人数+(子どもの人数-1)じゃないかな?最小は大人の人数+で子どものが多ければ子供の人数-大人の人数、少なければ子どもは全員無料で乗れる
n,m=map(int,raw_input().split()) if m==0: print n,n elif n==0: print 'Impossible' elif n>=m: print n,n+m-1 else: print n+(m-n),n+m-1
方針は概ねあっていたけど0人の場合のケースに対応できてなくて数度WA。。ショボイ。。。
B. Surrounded
geometry
ざっくりと大意
・平面上の座標x,yにある半径rの2つの円周の一番近い距離??
方針のようなもの
・2つ円が全くさっぱり離れていれば中点同士の距離から両方の半径を引く
・2つの中点の距離より大きい方の円のrが長いと大きい方の円の中に入ってしまっている。大きい方の半径から2点の長さと小さい方の円の半径を引くと円周の差だけ残るのでソレを2で割る
・後は接したり交差したりで0になることもある。
x1,y1,r1=map(int,raw_input().split()) x2,y2,r2=map(int,raw_input().split()) x2-=x1; x1-=x1 y2-=y1; y1-=y1 x=x2**2 y=y2**2 R=(x+y)**0.5 ans=(R-r1-r2)/2 #離れているか重ならずに接するならOK if R>=(r1+r2): print ans #内側に入って接していない対策 elif R+min(r1,r2)<max(r1,r2): print (max(r1,r2)-R-min(r1,r2))/2 #重なって接する対策 else: print 0
頭の中だけで考えるより紙とペンで書き出すと理解度がぜんぜん違う。。これからもアナログでもどんどん書き出していこう。