忍者ブログ
mirac cafe という名の不思議なブログ

※ ブログ等での私の投稿は個人の見解によるものであり、 所属する組織の見解ではありません。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

もう毎日がpku一色になってます(笑

今日は久しぶりにバイトに行って、帰ってきてから鍋を作りつつpku。笑"

んでー、記念すべき300問を突破しました。はっぴーw

300問めはこちら

500個の点が2次元平面上にあることを考えてみてください。

んで、各点と各点の位置関係、つまり"AはBの真北にある"とか、

"AはBの南西にある"とかいうのが10,000個与えられたとき、

その制約を満たすような500個の点の配置は存在するかどうか、という問題です。

さてうちのチームの人には解法を考えてもらいましょうか。

初めて"続きを読む"をつかってみるテスト。

さて解法。

んで、落ち着いて考えたら分かるんだけど、

南北方向と東西方向を独立にとけば良いわけですよ。

南北方向の制約が成立して、かつ東西方向も成立したときのみ、

問題全体として解が存在することが分かります。

なので、まず南北方向に考えてみます。

南北方向を数直線だと思って、点Aの場所をXa,点BをXbとかいう風に置くと、

Xa<Xb Xa==Xb Xa>Xbという3つの位置関係になって。

さらにXa<XbとXb>Xaは同じなので、"<"と"=="だけを考えたらいいことになります。

もし==がなければ普通にトポロジカルソートしたらいいのだけど、

(トポロジカルソートは以前このブログに書いたので分からない人は検索してみてw)

==があるからちょっと面倒くさくて。

自分は==の部分を全部1つの点に縮約した上でトポロジカルソートしたけど、

はたしてこれが想定解なのかどうかw

以上300問目の説明終わり、、301問目を解き始めることにしますw
PR
この記事にコメントする
お名前
タイトル
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
無題
問題文の説明は華麗にできたとおもったけど、
今度は解法の説明が(読み直してみると)めちゃくちゃだなぁ…w

ちなみに==の縮約にはunion_findを使いましたよっと。
mirac 2009/02/16(Mon)22:02:39 編集
解いたぞ
俺は制約条件を「閉路を持たない」にして解いた。まぁ要するにトポロジカルソートだけど言い方の問題www。==の条件にUnionFindは考えたなwwww
kaming 2009/02/17(Tue)00:19:26 編集
無題
300問おめ

ozyさん(short codeingの著者)が圧倒的すぎて絶望する
sky_way 2009/02/17(Tue)08:50:07 編集
無題
>kaming
閉路を持たない、で考えたら==はどう処理したんー??

>sky_way
知ってると思うけどー http://d.hatena.ne.jp/Ozy/
cozyは(英語そのままなら)心地よいとかいう意味だったようなw
mirac 2009/02/17(Tue)22:42:17 編集
無題
点の数を考えると、最初に==の関係をDFSで全て列挙することが可能(点Aと同じX座標の点が何か、点Aと同じY座標の点は何か、点B以降も同じ…)なので、位置関係の閉路を見つけるDFS中に探索している点とDFSを始めた始点が上記の関係に含まれているなら不可にした。
kaming 2009/02/17(Tue)22:49:30 編集
無題
なるほど、、2乗で大丈夫なのか。
自明な解法でいいときでもそれに気づかないことが多いわorz
mirac 2009/02/18(Wed)09:22:06 編集
この記事へのトラックバック
この記事にトラックバックする:
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
フリーエリア
最新コメント
[11/30 kamae]
[04/30 mirac]
[04/29 渚]
[01/20 渚]
[01/01 mirac]
[12/09 mirac]
[10/31 mirac]
[03/14 mirac]
[08/10 404ななしさん]
[08/09 halwhite]
最新記事
最新トラックバック
ブログ内検索
忍者ブログ [PR]