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

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

Codeforces Round #308 (Div.2)

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

A. Vanya and Table

ざっくりと大意

・下から上へ、左から右へ数えてそれぞれ1から100までナンバリングされた100・100のマスがある。
・\(x_1\),\(y_1\)から\(x_2\),\(y_2\)までの範囲をn回選択して、重複したマスも数え続けて合計で何マスになるか??

方針のようなもの

・重複を省かなくて良いならそれぞれの回で何マス選んでるかを加算し続ける。

python

n=int(raw_input())
ans=chk=0
for i in range(n):
    x1,y1,x2,y2=map(int,raw_input().split())
    ans+=(x2-x1+1)*(y2-y1+1)
print ans

重複を省かないので毎回加算するだけで大丈夫だった。省く場合は配列で選んだ箇所を変更してシミュレートしないと無理だろうけど。。

B. Vanya and Books

ざっくりと大意

・1からnまでが合計で何桁の数であるか。1から13までなら17桁で1から4までなら4桁である。

方針のようなもの

・入力最大が109だと1から加算し続けるとTLEになるので各桁ごとにまとめて数える。
  python  

n=int(raw_input())

if n<10:
    print n
    exit()
r=9
for i in range(1,10):
    chk=10**i
    t=len(str(chk))
    if n/chk>=10:
        r+=t*((chk*10-1)-chk+1)
    else:
        r+=t*(n-chk+1)
        break
print r

1桁の場合の後に出力の後でexit()を忘れていて無駄にWA。。