2012-01-10
Codeforces 100 Div2
記念の回らしいので参加。div1とdiv2の区別なし。
A. New Year Table
問題
- 半径Rの円卓に、半径rの皿をN枚並べたい
- 皿は円卓に外接すること
- 並べられるかどうかを答える
方針
- 図を描いたら正多角形が出てきた
- R >= (1+1/cosθ)rという怪しげな式が完成
bool Test(int n, int R, int r) { if (r > R) return false; if (n <= 1) return true; if (n <= 2) { return (R/2) >= r; } double S = M_PI * (n - 2); S /= (2 * n); double x = 1/cos(S)+1.0; x *= r; return R >= (x - 1.0e-9); }
B. New Year Cards
問題
- AlexanderはN人の友達からNew Year Card(e-mailみたいなの)をもらう
- 友達の番号=カードが届く順番としてカードにも同じ番号を振る
- すなわち友達1からカード1が最初に届き、友達2からカード2が次に届く
- もらったカードを再利用して全員に送る
- あるカードは何人に送ってもよい
- 友達と自分の全員はそれぞれ、好きなカードに序列がある
- 自分は手持ちのカードの中で好きな順番に送るが、もらったのと同じカードは送らない
- 1枚もらうごとに、自分の送信ルールを守る中で最良のカードが送れるタイミングで送る
- それぞれの友達に対して、何枚もらった時点で送るかを答える
方針
- 1枚からN枚まで1ターン毎にシミュレーション
- ターンごとに手札を自分の好きな順でソート
- 各友達について、送っていないか、または、より良いカードで送れるのなら送信履歴を上書き
- 最後に送信履歴を出力
for (i = 0; i < n; ++i) { vector<pair<int, int> > _pref; for (j = 0; j < n; ++j) { if (pref[j] <= i) { _pref.push_back(pair<int, int>(j, pref[j])); } } sort(_pref.begin(), _pref.end()); for (j = 0; j < n; ++j) { for (k = 0; k <= i; ++k) { int card = _pref[k].second; if (card == j) continue; } int pos = (int)(find(c[j].begin(), c[j].end(), card) - c[j].begin()); if (pos < sat[j]) { sat[j] = pos; ans[j] = i; } break; } } }
結果
o---- 368pt 967th rating 1493 -> 1526 (+33)
Aを解くのに40分、Bに1時間以上悩んだ。
Aはepsの符号を書き間違えて1回WAを出した。WAが出たということは誤差をついてくるpretestがあったようである。
Bは長文かつサンプルが1つしかないので厄介である。たとえばあるターンには複数の種類のカードが送れるとか。というか解いたらルールがわかる感じ。
一応青に戻ったが戦える気がしない。
- 62 https://topcoder-g-hatena-ne-jp.jag-icpc.org/
- 2 https://topcoder-g-hatena-ne-jp.jag-icpc.org/diarylist
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=srm 526.5&source=web&cd=2&ved=0CC0QFjAB&url=https://topcoder-g-hatena-ne-jp.jag-icpc.org/firewood/20120106/1325873167&ei=CXsMT5qZFZDLmAXwys2hBg&usg=AFQjCNFrbh5G5KRUfLYY3ZwhYI51ziANvg&cad=rja
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=srm 526.5&source=web&cd=2&ved=0CC4QFjAB&url=https://topcoder-g-hatena-ne-jp.jag-icpc.org/firewood/20120106/1325873167&ei=xlgNT82BB-6MmQWX0f2bBg&usg=AFQjCNFrbh5G5KRUfLYY3ZwhYI51ziANvg
- 1 http://www.google.co.jp/search?q=google+code+jam+japan+練習+解説&hl=ja&prmd=imvns&ei=n4MNT4afDO2ViQfciMHfBQ&start=10&sa=N&biw=320&bih=416
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=4と7 ラッキーナンバー&source=web&cd=16&ved=0CIQBEBYwDw&url=https://topcoder-g-hatena-ne-jp.jag-icpc.org/firewood/20110622&ei=9ucOT6-5OKnvmAXqqcTqAw&usg=AFQjCNETOIrtPsPtx9wa9v0ZNtVyvkhjbg
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=srm 526.5&source=web&cd=2&ved=0CDAQFjAB&url=https://topcoder-g-hatena-ne-jp.jag-icpc.org/firewood/20120106/1325873167&ei=VvYOT4rrCYbzmAWU99zhAw&usg=AFQjCNFrbh5G5KRUfLYY3ZwhYI51ziANvg&cad=rja
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=SRM504DIV2+500+&source=web&cd=6&ved=0CEkQFjAF&url=https://topcoder-g-hatena-ne-jp.jag-icpc.org/firewood/20110509/1304962847&ei=o9QPT4GMLYqeiQKw97DRDQ&usg=AFQjCNH4cOf6xdCC5pmjMFv-s1Sd7AI33A&sig2=qa6h1WIB2Qww3pws0CBYXQ
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=srm 528 div2 1000&source=web&cd=1&ved=0CCAQFjAA&url=https://topcoder-g-hatena-ne-jp.jag-icpc.org/firewood/20111231/1325330436&ei=QdgPT-XlKuTLmAWpwNX-CQ&usg=AFQjCNHCyJ-0lwd67SJr8foNQY1ekQHhlQ
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=srm 526 div2&source=web&cd=2&ved=0CCcQFjAB&url=https://topcoder-g-hatena-ne-jp.jag-icpc.org/firewood/20120106/1325873167&ei=PlAQT4apMs3vmAWy66jeAw&usg=AFQjCNFrbh5G5KRUfLYY3ZwhYI51ziANvg