大晦日からはじめました。気が向いた時にやって現在27問くらい解きました。
C++の自前多倍長は正直クズなので、Pythonとか使えるようになりたい。
本当に簡単な問題しか解いてないと思うので、ちょっとずつ難しいのにも手を出そうと思います。
感想とかした解法とか
1
手計算: (3の倍数の総和) + (5の倍数の総和) - (15の倍数の総和)
2
シミュレート
3
main(){system("factor ...");}
4
全探索
5
手計算: 1~20の最小公倍数
6
シミュレート
7
prime[100000] (0-indexed)
8
5つの連続している桁の積の最大。なんか自分で見つけられた。うれしかった。
9
工夫すると全探索でも9万回無いくらいのループで済んだ。
10
long long
11
番兵・方向配列などを使い効率的な実装をすると10分かからない。
使わないとおそらく地獄。
12
*1s[s.find_first_of(",\"")]=' ';
してstringstreamにつっこんでパースしてソートして・・・
24
t = "0123456789";
do{ ... }while(next_permutation(t.begin(),t.end()));
で、100万カウント目で出力。dfsしてもよかったけど全く同じこと。
25
多倍長 + DP。残念多倍長に対しての1000桁はやや重たいんで簡便してもらえますか。4桁区切りだからまだそこまでって感じだけど。
26
AOJにこんな問題あったなーみたいな感じで解いた。
47
シミュレート。解が見つかるまでループ
48
面倒くさかったのでpython様に頼りました。3行で実装できるのはあまりにも素晴らしすぎた。
49
素数配列つくる。
表カウントしつつ埋めていって最後に表[ 素数配列[i] ]の値が最も大きいやつ出力。
52
全探索。桁操作するときにもstringstreamすごく便利だ。
*1:i-1)*i)/2で解が見つかるまでループ回しつつ、その約数の個数求めた。
13
多倍長
14
コラッツ兄貴オッスオッス。100万以下の全ての値に対してシミュレート。途中で大変な値になったりする可能性があるので、シミュレートはlong longでしないとしぬ。
15
long long,典型的DP(本格的~みたいなノリで)
16
多倍長。
18
幅優先探索でもいいけどめんどいのでDPした。AOJにこれのだるい版(ひし形)がある。
20
多倍長。
21
実装面倒くさかったのでWikipedia+Windows Calc。
22
やるだけなんだけど重い(実装よりも処理が)。
while(~s.find_first_of(",\""