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回選択して、重複したマスも数え続けて合計で何マスになるか??
方針のようなもの
・重複を省かなくて良いならそれぞれの回で何マス選んでるかを加算し続ける。
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。。