2011-04-01から1ヶ月間の記事一覧

SRM499 Div1 Medium(550) WhiteSpaceEditing

WhiteSpaceEditing分からなかったので、他の方のブログなどを見てみる。1個上が空白ではない空白の個数+行数−1 でいいらしい。DELETEは要らない。え、こんなんでいいの……。たしかに、どうやってもこの打数は必要だし、この打数で文章は作れる。負け惜しみ…

SRM504 Div2 Hard(1000) Algrid

Algrid次の行に移った時、前の行は出力と同じになっているはずなので、行ごとに辞書順最小の入力を求めれば良い。マスごとに別の値を入れて問題通りに動かしてみる。その値が白か黒に塗られれば元の値はどちらでも良いので黒にする。塗られなければ、異動先…

SRM504 Div2 Easy(250) ComparerInator

ComparerInator #include <vector> using namespace std; int p1( int a, int b ) { return a; } // a int p2( int a, int b ) { return b; } // b int p3( int a, int b ) { return a<b?a:b; } // a<b?a:b int p4( int a, int b ) { return a<b?b:a; } // a<b?b:a bool check( vector<int> A, vector<int> B, vector<int> …</int></int></b?a:b;></vector>

SRM504 Div1 Medium(500) AlgridTwo

AlgridTwo次の行に移った時、前の行は出力と同じになっているはずなので、行ごとに何通りの入力があるかを求めて掛け合わせればよい。 行ごとのありうる入力の個数は動的計画法で求める。あるマスの1つ前まで処理を行って、そのマスが白や黒になった場合に…

SRM504 Div1 Easy(250), Div2 Medium(500) MathContest

MathContest取り出す度に残りのボールの色や向きを反転せずに、これまでに取り出したボールの個数の偶奇で、取り出す位置を変えたりボールの色を反転するようにすればO(n)になる。 #include <string> using namespace std; class MathContest{public: int countBlack</string>…

SRM504

トラブルのためレーティング無し。500が解けなかったので助かった。

SRM503 Div2 Hard(900) KingdomXCitiesandVillagesAnother

KingdomXCitiesandVillagesAnotherちょっと違うけど、プリム法。短いものから貪欲に道路を追加していけば良い。 #include <vector> #include <cmath> using namespace std; double dist( int x1, int y1, int x2, int y2 ) { return sqrt(double(x1-x2)*(x1-x2)+double(y1-y</cmath></vector>…

SRM503 Div2 Easy(250) ToastXRaspberry

ToastXRaspberry class ToastXRaspberry{public: int apply( int upper_limit, int layer_count ) { return (layer_count+upper_limit-1)/upper_limit; }};

SRM503 Div1 Medium(500) KingdomXCitiesandVillages

KingdomXCitiesandVillages道路の総延長の平均はそれぞれの村から伸ばす道路の平均長の和と等しい。村から伸ばす道路の長さは村を選ぶ順番によって決まる。村iから村jに道路を延ばすような村の選択の順番は何通りあるかと考える。 #include <vector> #include <cmath> #incl</cmath></vector>…

SRM503 Div1 Easy(250), Div2 Medium(500) ToastXToast

ToastXToast焼きすぎのパンの時間が焼き足りないパンの最短時間より短かったり、焼き足りないパンの時間が焼きすぎのパンの最長時間より長い場合は条件を満たすことができない。 そうでない場合は多くとも2種類のパンがあれば良い。例えば、under={1,3,5,7,…

SRM503

Easy (250) 184.02 Medium (500) 0 Hard (1000) 0 Challenge -25 結果 1762 → 1728チャレンジミスがもったいない(´・ω・`)

Codeforces Beta #66 C. LionAge II

LionAge II動的計画法。最後の文字と書き換え回数ごとに最大ボーナスを覚えておく。 #include <iostream> #include <string> #include <algorithm> using namespace std; int main() { string s; cin >> s; int k; cin >> k; int n; cin >> n; static int bonus[128][128]; for ( int i=0;</algorithm></string></iostream>…

Codeforces Beta #66 B. Need For Brake

Need For BrakeVasyaが最高の順位を取る時、Vasyaは最高点。この状態で一度ソートして、Vasyaより順位が下のレーサーに対し、低い点数を順に割り当てていく。ただし、最も低い点を割り当ててもVasyaより高順位になるレーサーは除く。 Vasyaが最低の順位を取…

Codeforces Beta #66 A. The Elder Trolls IV: Oblivon

The Elder Trolls IV: Oblivon切る回数はなるべく各方向に均等に分けた方が良い。ただし、セル数-1回しか切れない。 x,y,z,k = map(int,raw_input().split()) x,y,z = sorted((x,y,z)) kx = min(x-1,k/3); k -= kx ky = min(y-1,k/2); k -= ky kz = min(z-1,…

Codeforces Beta #66

A 150 B 0 C 812 Hack 0 結果 174位 1944 → 1870 (´・ω・`)

解いた問題を→に表示するようにした

SRMなどの過去問を解こうと思ったけど、どの問題が解いていない問題か分からないので、→に記事へのリンクを表示するようにした。適当なスクリプトで記事一覧から抽出して、手動で貼り付け。なので更新が遅いかも。2011/05/27 再試合の小数点に対応。 # codin…

SRM502 Div2 Hard(1000) TheCowDivTwo

TheCowDivTwo動的計画法。i番目までの牛からj匹を選んで和をNで割った余りがkとなる組み合わせの個数を覚えておく。 #include <vector> using namespace std; class TheCowDivTwo{public: int find( int N, int K ) { int M = 1000000007; // [i][j] 和をNで割った余</vector>…

SRM502 Div2 Easy(250) TheProgrammingContestDivTwo

TheProgrammingContestDivTwo実際のコンテストでもrequiredTimeが分かれば楽なのだが……(´・ω・`) #include <vector> #include <algorithm> using namespace std; class TheProgrammingContestDivTwo{public: vector <int> find( int T, vector <int> requiredTime ) { sort(requiredTime.be</int></int></algorithm></vector>…

SRM502 Div1 Medium(500) TheProgrammingContestDivOne

TheProgrammingContestDivOne与えられたタスクを全て解く場合には、最も点数が高くなる順番は簡単に求められる。タスクが2つの場合に解く順番ごとの点数を求めると、pointsPerMinute[0]*requiredTime[1]>pointsPerMinute[1]*requiredTime[0]ならばタスク0か…

SRM502 Div1 Easy(250), Div2 Medium(500) TheLotteryBothDivs

TheLotteryBothDivsa,b∈goodSuffixesについてaがbの接尾辞ならば、bが無くても当たり籤は変わらない。例えばサンプル3ならば4747は要らない。goodSuffixesから他の要素が接尾辞になっているような要素を除いた集合Sを考える。当たり籤はちょうど1個のSの要素…

SRM502

Easy (250) 0 Medium (500) 0 Hard (1000) 0 Challenge 0 結果 1946 → 1762250は解き方はすぐ分かったけど実装に時間が掛かった上、バグっててシステム落ち。500は解き方すら分からなかった。。・゚・(ノД`)・゚・。解けた人数が2桁とかの難しい問題ならまだしも、け…

SRM500 Div2 Hard(1000) GeometricProgressions

GeometricProgressions積なので素因数分解が簡単に計算できる。素因数の個数を覚えておく。コメントアウトのように書いたらメモリ不足で落ちた。b2*q22以降は、b2*q21と異なりS1に含まれないものの個数を数えるだけにしたら通った。 #include <set> #include <map> usi</map></set>…