ページ 1 / 1
パソコン甲子園について
Posted: 2020年9月09日(水) 09:03
by ウッティ
2019年パソコン甲子園問題6が全然わかりません。
教えてくれませんか?
Re: パソコン甲子園について
Posted: 2020年9月09日(水) 20:33
by みけCAT
過去問|パソコン甲子園2019
に載っている予選の問題ですか?
そうだとしたら、色が塗られている領域は常に長方形になるので四隅の座標を保持するだけで管理でき、
次に色を塗る領域もそこから簡単にわかるので、
指定の位置が次に色を塗る領域に入っているかを判定し、入っていればその色を出力するようにすればよさそうですね。
Re: パソコン甲子園について
Posted: 2020年9月09日(水) 21:43
by ウッティ
えーっと最近c言語を始めたばかりで問題5が解けて
問題6で躓いています。
まず四隅の座標はどのように保持するのかとどのように指定の位置が次に色を塗る領域に入っているかを判定するのかがわかりません。
教ええいただけないでしょうか。
Re: パソコン甲子園について
Posted: 2020年9月11日(金) 20:12
by みけCAT
四隅の座標はxとyに分け、タイル1個分を1とした値で複数のint型の変数で保持するといいでしょう。
指定の位置が次に色を塗る領域に入っているかは、次に色を塗る領域を求めた後、
「次に色を塗る領域の東の端のx座標 ≦ 指定の位置のx座標」かつ
「指定の位置のx座標 ≦ 次に色を塗る領域の西の端のx座標」かつ
「次に色を塗る領域の南の端のy座標 ≦ 指定の位置のy座標」かつ
「指定の位置のy座標 ≦ 次に色を塗る領域の北の端のy座標」
かで判定するといいでしょう。 (条件を全て満たす ⇔ 入っている)
Re: パソコン甲子園について
Posted: 2020年9月16日(水) 20:24
by あたっしゅ
フィボナッチ数の正方形ですね。
https://ja.wikipedia.org/wiki/%E3%83%95 ... 1%E6%95%B0
フィボナッチ数 フィボナッチすう、英: Fibonacci number
この問題の場合は、2次元配列の方がいいだろ。
C/C++ は、配列に負のインデックスないけど、class 化してアクセスすればいい。
1113333333333
1113333333333
1111233333333
2222233333333
2222233333333
2222233333333
2222233333333
2222233333333
Re: パソコン甲子園について
Posted: 2020年9月17日(木) 01:34
by みけCAT
あたっしゅ さんが書きました: ↑4年前
この問題の場合は、2次元配列の方がいいだろ。
この問題で入力される座標の範囲はx, yともに-10**6~10**6なので、
この範囲のタイルを全て2次元配列で用意すると、
1個のタイルを1バイトで表現すれば約4TBになってしまいます。
1個のタイルを2ビットで表現しても、約1TBです。
これは現在一般的なコンピュータの主記憶で扱うには大きすぎるでしょう。
また、この巨大な配列の要素を埋めるのにも、現在一般的なコンピュータでは長時間かかることになるでしょう。
従って、わざわざ指定の場所に到達するまでの全タイルの情報を持つのではなく、
塗った範囲の四隅の座標だけを管理する方がいいでしょう。
(「2次元配列」とあるだけで「全タイルの情報を持つ」とは明示されていませんが、
下の数字列より全タイルの情報を持ちたいのだと解釈しました)
2次元配列を使うとしたら、四隅の座標を2次元配列でもつことで、
もしかしたらなんかいい感じに処理が書けるかもしれないですね。 (ちゃんと考えてはいませんが)