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

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

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

Codeforces Round #291 (Div.2)

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

A. Chewbaсca and Number

ざっくりと大意

・入力で与えれる数の各桁をそのまま使うか、9-tで反転?させて最小の数になるようにする。
・ただし0で始まる数にすることは出来ない。

方針のようなもの

・先頭から全部確認する。

python

n=raw_input()

def sol(ans,x):
    for i in x:
        if int(i)>9-int(i):
            ans+=str(9-int(i))
        else:
            ans+=i
    print ans
if n[0]=='9':
    sol('9',n[1:])
else:
    sol('',n)

普通にこのタイプの問題なら0始まりは使えなくて当然のはずなのに、問題文にも書かれていたのに何も考慮せずに無駄に1WAした。。本番ではなくても日頃から気をつけよう。

B. Han Solo and Lazer Gun

ざっくりと大意

ハン・ソロが\(x_0\),\(y_0\)の座標に立って、一直線に銃を撃って直線上の全てのストーム・トルーパーを倒す。
・n体いる敵をすべて倒すには銃を何回撃つか??

方針のようなもの

・決められている立ち位置とある任意の敵の位置を選び、残りの一覧から直線上にいるものを見つける??

python

n,x,y=map(int,raw_input().split())

def chker(xa,ya,xb,yb,xc,yc):
    if abs(((xa-xc)*(yb-yc))-((ya-yc)*(xb-xc))):
        return 1
    else:
        return 0


l=[]
ans=xchk=ychk=0
for i in range(n):
    sx,sy=map(int,raw_input().split())
    if sx==x:
        xchk=1
    elif sy==y:
        ychk=1
    else:
        l.append((sx,sy))
ans+=(xchk+ychk)
chk=len(l)
while chk:
    if chk==0:
        break
    s=l.pop()
    chk-=1
    tmp=l[:]
    for i in l:
        if chker(x,y, s[0],s[1], i[0],i[1])==0:
            tmp.remove(i)
            chk-=1

    ans+=1
    l=tmp[:]
print ans

abs(((xa-xc)*(yb-yc))-((ya-yc)*(xb-xc))) 3点の座標で計算して0ならば一直線に並ぶ関係である。0にならない場合は3点の座標は三角形になる座標になるので他の問題でも色々使える式だと思う。