時間制限:2000ミリ秒
メモリ制限:65536KB
アスキーアート
問題
アスキーアートは、ASCII文字を格子状に並べて絵を描くアートである。様々なスタイルのアスキーアートがあるが、ここでは特に有名なもので、次のようなものに興味がある。つまり、文字の種類は、絵の対応する領域の濃さをあらわす。
あなたはデモプログラムとして、中が塗られた多角形をASCII文字の矩形格子で表現するプログラムを書く必要がある。これは以下のようなプロセスを踏む。
OXYを直交座標系とし、OXは右を、OYは上を指すとする。描画キャンバスの範囲は(0,0) - (w,h) の矩形である。キャンバス上のピクセルは、0≦x<wと0≦y<hなる整数x,yを用いて、(x, y) - (x + 1, y + 1)なる正方形であらわされる。自己接触や自己交差のない(ただし凸集合とは限らない)多角形がキャンバスに塗られる。このプロセスによって、各ピクセルは部分的に塗られる。各ピクセルはその中の塗られた部分の割合によって、以下の表に従ってASCII文字で表現される。
ピクセルの塗られた部分の割合 | 文字の名称 | 文字 | 文字のASCIIコード |
0%以上25%未満 | ピリオド | . | 46 |
25%以上50%未満 | プラス記号 | + | 43 |
50%以上75%未満 | 小文字のo | o | 111 |
75%以上100%未満 | ドル記号 | $ | 36 |
100% | ハッシュ記号 | # | 35 |
このようにして得たASCII文字の格子は、上から下へ、左から右へ、の順番で出力される。
入力
入力の最初の行は3つの整数n,w,h(3 ≦ n ≦ 100, 1 ≦ w, h ≦ 100) - それぞれ、多角形の頂点数、キャンバスの高さと幅をあらわす - が書かれている。
続くn行には多角形の頂点が時計回り順に書かれている。i番目の点は2つの整数xiとyi(0 ≦ xi ≦ w, 0 ≦ yi ≦ h)で表現される。
出力
与えられた多角形を描いたASCIIアートを、w文字の行をh行使って出力せよ。
入力例
6 8 7 7 6 1 0 1 7 5 5 2 4 2 3
出力例
.$+..... .##$+... .#$oo+.. .#+$o... .##o.... .#o..... .o......
出典
Northeastern Europe 2006