Processing math: 0%

2020年1月9日木曜日

Codeforces Round #612

 Aで時間がかかってしまって混乱したので飛ばし、B、Cを考えていたけれど分からずの0完……。

Div. 2 B. Hyperset


 O(n^3)だと厳しいので、どうやって計算量を落とすか、という問題(C++で枝狩りすればO(n^3)で通るようですが)

・半分全列挙でO(n^2)に。

→本当に半分だと半分全列挙は思いつきやすいけど、O(n^3)O(n^2)に落とすとき思いつきにくくなるので注意。

コンテストへのリンク


A. Garland


・(上手く貪欲すれば解けるらしいけど)制約を見るとDPが自然

→偶奇のどちらを使ったか、偶数・奇数それぞれを何個使ったかを持ってDP。これでO(n^3)

・コンテスト中は、i番目を見るとき、今まで使った偶数の個数+奇数の個数がiになることを使えばO(n^2)になるし、DP配列を使い回せばメモリ節約できる……とか混乱してハマった。

→この問題は制約が甘いので、O(n^3)で簡単に書けば良い。まあO(n^2)にするだけなら良いと思うけど、後半のDP配列の使い回しは混乱を招くので避けるべきだった。

B. Numbers on Tree


・制約を確認!!

→これも制約が甘いので、単純なO(n^2)でOK。葉から貪欲にnodeの値を決め、今まで使った数字の間の値にしたくなったなら、それより大きい数字を一個ずつずらせば良い。

C1. Madhouse (Easy version)


・「全ての部分列」にはかなりの情報量が含まれるので、簡単に決まるのでは?

→1:nと2:nだけで決定できる!


0 件のコメント:

コメントを投稿