2017-08

Latest Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

SRM 525 DIV 1


配点は気にせず,950 → 525 → 300 と解いた.全部通ったが,950 の速度が足りず 4 位.

300: DropCoins


M * N のマス目があり,いくつかのマスにはコインが置かれている.4 方向のいずれかを選び,コインを一斉にその方向へ 1 マス動かすという操作ができる.盤からはみ出たコインは落ちる.盤上のコインをちょうど K 個にするための操作の最小回数を求める.不可能ならば指摘.
1 <= M, N <= 30,1 <= K <= 900.

残せる区画は長方形領域.上下から x0 行,x1 行,左右から y0 行,y1 行削るときの最小操作回数は x0 + x1 + min{x0, x1} + y0 + y1 + min{y0, y1} と求まる.全体で O(M^2N^2).

525: Rumor


N 匹のうさぎがいて,A, B 2 つの噂を流す.最初各うさぎは両方とも知っているか両方とも知っていないかのいずれかである.各うさぎは各日に,知っている噂から 1 つを選び,信用してくれるうさぎすべてに伝達する.信用関係は有向グラフとして与えられる.全員に両方の噂が伝わるまでの最短日数を求める.不可能ならば指摘.
1 <= N <= 16.

各うさぎは同じ噂を 2 回流す必要がないので,行動としては A と B のどちらを優先させて流すかの 2 通り.よって 2^N 通りシミュレーションを行えばよく,N 日あれば終わることから各シミュレーションは O(N^2) で実装できる (拡散を計算する際ビット演算を用いる).

950: MonochromePuzzle


N * N (N は偶数) のマス目があり,各マスは白か黒である.i, j を選び,第 i 行と第 j 行を入れ替え,第 i 列と第 j 列を入れ替える,という操作ができる.目標の盤面は,黒いマスが |i - j| = 1 or i + j = N - 1 or {i, j} = {0 , N / 2 - 1} or {i, j} = {N / 2, N - 1} にあるものであり,これに至るまでの操作の最小回数を求める.不可能ならば指摘.
6 <= N <= 50.

グラフの同型を求める問題.置換が与えられたとき操作の最小回数は N - (巡回の個数).
グラフは N / 2 角柱の形状をしている.まずグラフの無向性と各頂点の次数が 3 であることを確認した.N = 8 はすべての置換を試す (実際は N <= 8 でそうした).N != 8 のとき,ある辺が底面の辺か否かはその辺を含む長さ 4 のサイクルが 1 個か否かで判定できる (適当に書いて O(N^4),存在する辺を辿れば O(N^2)).その結果により長さ N / 2 のサイクルを 2 つ見つけ,どちらのサイクルから回るか,どの場所から回るか,どちら向きに回るか,の組み合わせをすべて試し判定する (適当に書いて O(N^3),自己同型は 2N 個なのでちゃんとやれば O(N^2)).

ある四角形の面の 3 点を固定すれば残りの頂点は決まっていく,という方針でも解ける.

平面で考えており,N / 2 角柱である,という言い換えができなかった.また,自己ループの有無を判定するときに u と v を書き間違えたが,十分に条件を重ねて判定を行っていたため最初に影響はなかった.

スポンサーサイト

SRM 520 DIV 1

1000 → 250 → 500 と解いた.点数に余裕があったのでちゃんと読まず撃墜 1 ミスしてしまった.全部通って初の 1 位.

250: SRMCodingPhase


SRM に参加する.問題 i (0 <= i < 3) は t 分で解くと points[i] - 2^(i+1) t 点得られる.問題 i を skills[i] 分で解く能力がある.ポイントを luck 点持っていて,1 点につき 1 分解く時間を減らせる (ただし整数分であり,1 分以上はかかる).75 分以内に獲得しうる得点の最大値を求める.

解く問題の集合を決めれば,後ろの問題から順に luck を貪欲に使えばよい.

luck の割り振りを全部試しても間に合う.

500: SRMIntermissionPhase


SRM のスコアボードで,1 位から N 位まで順に各問を提出したかどうかが与えられる.問題 i (0 <= i < 3) は 1 点以上 points[i] 点以下になる.同点がいないものとして,スコアボードが何通りあるかを mod 1,000,000,007 で求める.
points[0] <= 30,000,points[1] <= 60,000,points[2] <= 110,000,N <= 20.

問題の集合に対して,合計 x 点とる方法が何通りかは DP で求まるので,それを利用して N 人分 DP を行えばよい.どちらの DP でも部分和をもっておけば遷移を O(1) で計算できる.

1000: SRMChallengePhase


SRM の撃墜の記録を考える.撃墜には成功か失敗かであり,2 つ以上の撃墜は同時には試みられない.N 人がいる.
・各人は高々 1 回撃墜を試みた.試みたか否かが与えられる.
・各人は高々 1 回撃墜成功された.成功されたか否かが与えられる.
・自分自身には撃墜を試みない.
・自分が撃墜成功された後は撃墜を試みない.
・撃墜失敗は自由に起こる.撃墜成功された後に起こることもある.
撃墜の時間順と成功・失敗の列が何通りあるかを mod 1,000,000,007 で求める.
N <= 2,500.

試みかつ成功された人たちを A,試みかつ成功されていない人たちを B,試みておらずかつ成功された人たちを C とする.撃墜を時間が後のものから順番に考えるとき,A の人が撃墜するときはそれ以前に撃墜されていなければならない.撃墜の対象は A の人かどうかのみが重要であり,A の人でない場合は C の人か失敗 (N - 1 通り) である.
よって,撃墜した人が A かどうか,撃墜された人が A かどうか,の順番を求めて適当な係数をかければよい.前者は DP で求まり,A を a 人,B を b 人既に使ったとき,A を使うならば撃墜されたタイミングが b 通りあるので b をかけて遷移させる.O(N^2).

SRM 512 DIV 1

1024 → 256 → 512 と解いて撃墜なし.512 を落とした.

256: MysteriousRestaurant


レストランが N 日間開かれる.M 種類の料理があり,日付と種類により価格が与えられる.初日から連続して毎日 1 つずつ料理を食べるが,i 日目と i + 7 日目の料理は同じでなければならない.与えられる予算内で最大何日続けられるか求める.
N <= 50,M <= 50.

日数を決め打てば,各曜日について最安価な料理を選べばよく,可能かどうか判定できる.それを用いて日数をすべて試すか二分探索.

512: SubFibonacci


Fibonacci 数列とは正の整数の列であって,3 項目以降が前 2 項の和であるもの.長さ 0 以上 2 以下の場合も含める.整数の集合 S があり,
・S から元をいくつかの取り出しある Fibonacci 数列の部分列 (連続でなくてもよい) A を作る
・S の残りの元をいくつか取り出しある Fibonacci 数列の部分列 B を作る
・A ~ B は昇順に並んでいなければならない
という操作によって得られる A ~ B の長さの最大値を求める.
|S| <= 50,(S の元) <= 100,000,000.

S を昇順ソートして区切る場所を N + 1 通り考え,小さい方から A を,大きい方から B を作るとしてよいので問題を分割できる.Fibonacci 数列の部分列について,先頭の項は含まれると考えてよい.そこで,先頭の項と途中の項,途中の項が Fibonacci 数列の何番目にあたるか,をすべて調べる.これらを決めれば Fibonacci 数列は復元できる (標準的な Fibonacci 数は前計算).復元された数列で,先頭の項以上の値がいくつ集合に含まれるかをカウントすればよい.

A として [ 3, 1, 4, 5 ] を許してしまった.[ 3, 4, 5 ] が許されるので間違えやすい.また最初「昇順」を見落としていたのもミスに繋がった.

1024: PickAndDelete


長さ N の正の整数の列 S が与えられるので,適切に並べ替えると各 i で x[i] <= S[i] を満たすような長さ N の正の整数の列 x の個数を mod 1,000,000,007 で求める.
|S| <= 200,(S の元) <= 1,000,000,000.

数えるのは昇順に並べ替えたときに x[i] <= S[i] を満たすもの.S[0] = 0 として N 個の区間 (S[i - 1], S[i]] に分けて考えることができ,このうちの j 番目までで j 個以上選ぶことが条件となる.これで O(N^3) の DP で求まる.

i <= n まで x[i] <= S[i] を満たす長さ n の数列の個数を DP で O(N^2 log N) で求められる.x[i] > S[i] となる最小の i に注目して引いていけばよい.

TCO11 Round 3

350 人中 150 人が Round 4 へ進出.
1000 → 250 の順で解いて,500 が時間切れ.撃墜 1 つ.
1000 が簡単だったが,不安で丁寧にテストした.提出後早めに切り上げれば 500 が間に合ったかもしれない.

250: ArtShift


'B', 'W' からなる長さ N の文字列 sequence に対して N 元の置換を繰り返し作用させるとき,生じる異なる文字列の個数の最大値を求める.
N <= 30.

巡回ごとに考えると,'B' が x 個,'W' が y 個含まれるとき x == 0 or y == 0 ならば 1 通り,そうでなければ x + y 通り生じる.全体では (x, y) たちに分割したときに x + y の lcm を最大化することになる.sequence 内の 'B' を X 個,'W' を Y 個とすると,N の min{X, Y} 個以下への分割でパーツの lcm を最大化すればよい.N の分割数が十分小さいので全探索でよい.

500: PrefixFreeSuperset


'0', '1' からなる文字列の prefix-free な集合 cur が与えられる.cur の superset であって大きさが k であるものの,元の長さの和の最小値を求める.この最小値が 10^18 を超えるならば代わりにそれを指摘.そのような集合が存在しなければ指摘.
|cur| <= 50,(cur の各元の長さ) <= 50,k <= 10^12.

まず木を考えて空いているノードを探す.これは,cur の各元 s と各 x に対して,s[0 .. x] と (s[x] の反転) を結合させたものを候補として,別の cur の元と prefix 関係になっていないものを set に入れてしまえばよい.
空いているノードの「根」はその長さをコストとして集合に追加できる.また,既に追加した長さ c の文字列はコスト 2(c + 1) - c により子 2 つに置き換えることができる (結果として集合のサイズを 1 増やせる).これらの 2 パターンをコストをキーとする priority queue あるいは map で管理すればよい.指数爆発するので見ることになる文字列の長さの個数は十分少なく間に合う上,答が 10^18 を超えることもない.

1000: RowOfColors


h 行 w 列のマス目を k 色で塗る.1 行目は k 色すべてを含まなければならず,各色のマスは連結でなければならない.あり得る 1 行目のパターンの個数として考えられるものの個数を mod 1,000,000,007 で求める.
1 <= h, w, k <= 300.

1 行目の色を順に見ていくときに,初出でスタックに push し,ある色が現れたらそれが top になければならないとし,最後の出現で pop する,と考えると,満たすべき条件はスタックの最大サイズが w 以下であること.どこまで見たかとスタックのサイズをキーにして DP すればよい.

SRM 511 DIV 1

1000 から開き,バグが取れず残り 10 分になりとりあえず 250 を片づけ,1000 に戻ったがあと少しのところで間に合わず.撃墜は 1 成功.

250: Zoo


うさぎとねこがあわせて N 匹いて,全員の身長は異なる.N 匹それぞれに対して,「同じ種類で自分より高いのは何匹か」という情報がある.どの動物がうさぎでどの動物がねこか,のパターンが何通りあるか求める.
N <= 40.

うさぎが x 匹,ねこが y 匹であれば (0, 1, ..., x - 1; 0, 1, ..., y - 1) となるのでこれをソートして入力の vector と比較.一致したとき答に 2^min{x, y} を足せばよい.

500: FiveHundredEleven


511 以下の非負整数が書かれたカードが N 枚あり,2 人でゲームを行う.最初場の数は 0 で,交互に 1 枚ずつカードを使う.カードを使うと場の数に bit の or で足される.カードがなくなるか,511 を作った方が負け.先手勝ちか後手勝ちか答える.
N <= 50.

場の数と,場の数を変えないカードが何枚残っているか,を状態にして DP.場の数を変えるカードはすべて使っていないことからこれで状態が表せることがわかる.計算量は 512 * N * N^2.

場の数を変えないカードを使う,という場合を実装し忘れて WA を出した.

1000: GameOfLifeDivOne


ライフゲームの変種.0, 1 が 1 次元円形上に N 個並ぶ.時間が 1 経つと,各セルはそれと隣の 3 セルのうちの多数派になる.'0', '1', '?' からなる文字列が与えられるので,時間 T が経ったときに少なくとも K 個の 1 があるような '?' の埋め方は何通りあるか求める.
N <= 50,T <= 1,000.

同じものが隣接していれば変わらない.00 と 00 に挟まれた部分は 1 が 1 つずつ減り,11 と 11 に挟まれた部分は 1 が 1 つずつ増え,00 と 11 あるいは 11 と 00 に挟まれた部分は 1 の個数は変わらない.2 個以上同じものが隣接する場所をどこにするかを決めればよい.
円形なのでどこかできる.全体で 0, 1 が交互のケースは特別処理し,2 個以上同じものが隣接しているブロックのうち左端が最も左にあるものの位置と 0/1 で場合分け.それぞれのケースは,最後に作ったブロックの位置と 0/1,時間 T の後の個数,を状態にして DP すればよい.
元から書かれている 0, 1 については,0000..., 1111..., 0101..., 1010... のそれぞれに一致しない箇所の部分和をもっておけば適合するか判定できる.2N くらいまで作っておく.
全体で O(N^5).

SRM 410 DIV 2

練習.

250: ContiguousCacheEasy


n バイトのメモリがある.一度に k バイトキャッシュでき,最初 [0, k - 1] を持っている.addresses[i] に順にアクセスする.このとき新たなキャッシュが必要になったら現在の場所に近い場所を持ってくる.新しく読み込むメモリの合計を求める.

各回に読み込むのは min{(移動量), k}.

500: AddElectricalWires


N 個のノードがあり,その wire での接続関係 (無向単純グラフ) が隣接行列で与えられる.いくつかのノードは main grid に直接繋がっていて,main grid に繋がっている 2 ノードは wire で直接にも間接にも繋がってはいない.この条件を保ちつつ wire を増やすとき最大何本増やせるか.
N <= 50.

main grid に直接繋がっているノードを含む連結成分のサイズを列挙し,それぞれを完全グラフにできるので増やせる辺がわかる.main grid に間接的にも繋がっていないノードたちは最大の連結成分につ繋げるのがよい (nC2 が凸なので).

1000: ClosestRegex


文字列 text と正規表現 regex が与えられる.ここで regex が含む特殊な文字は '*' のみであり,すなわち regex の各単位は「文字 X 1 個にマッチ」「文字 X 0 個以上にマッチ」のいずれかである.text の何文字かを書き換えて regex にマッチするようにしたい.書き換える文字数を最小化した上で,得られる辞書順最小の文字列を求める.
|text| <= 50,|regex| <= 50.

text[x .. $] を regex[y .. $] にマッチさせるための,最小書き換え数とできる辞書順最小の文字列の pair を求めていく.regex[y + 1] == '*' ならば y を 2 つ進められる.text[x] を必要ならば regex[y] に書き換え,次は (x + 1, y) あるいは (x + 1, y + 1) を見ることになる.string を比較するので計算量は O(|text|^2 |regex|).
計算量に余裕があり string を比較できるので,最小値だけ求めてから復元,とするより楽.

TCO11 Round 2

850 人中 350 人が Round 3 へ進出.
1000 → 250 の順で解いて 500 が時間切れ.Challenge は何もせず.
1000 が落ちたが 250 の速度があってなんとか通過.

250: GuessTheNumberGame


ある整数が 1 から n で割りきれるか否かを 'Y'/'N' の列で表した長さ n の文字列は何通りあるか,mod 1,000,000,007 で求める.
1 <= n <= 10^6.

素因数で決まる.p^e <= n < p^(e+1) ならば,p の肩が 0, 1, ..., e-1 あるいは e 以上,の e + 1 通りに区別されるので,それらの積.

500: STable


s ~ t の文字がすべて異なる文字列 s, t に対して,
・table[i][0] = s[i - 1]
・table[0][j] = t[j - 1]
・table[i][j] = min(table[i - 1][j], table[i][j - 1]) ~ max(table[i - 1][j], table[i][j - 1])
により table を求める.table[|s|][|t|] の位置 pos から 50 文字 (あるいは末尾まで) を求める.
1 <= |s|, |t| <= 30.

table[i - 1][j] と table[i][j - 1] のどちらが小さいかをすべて知れば,(i, j) = (|s|, |t|) から辿って復元できる.
比較結果をメモ化することで,(a, c), (a, d), (b, c), (b, d) の大小を知ったうえで a ~ b と c ~ d を比較したい.ここで,table の異なる場所は文字の集合として異なるので,等しくなければ一方が他方の prefix になることはない.よって (a, b) と (c, d) を pair として比較すればよい.
メモ化されるのは斜めに揃ったところの比較なので,3 乗オーダ.

本番中は table に sort, unique をかけたものとして比較すればよいだろう,と思ってやったが誤りのようだった.

1000: CircuitDesign


二部グラフを平面に描きたい.辺は交差せず,外側を通らないようにする.上下の n 頂点ずつの並べ方が何通りあるか,mod 1,000,000,007 で求める.
n <= 50,(辺数) <= 50.

caterpillar tree (caterpillar forest) の問題.細かい条件をいろいろ処理する.
サイクルがあれば不可能.u の隣接点 v で deg(v) >= 2 なるものの個数を deg'(u) とする.deg'(u) >= 3 ならば不可能.
孤立点は後で任意の位置に挿入できる (場合の数も求まる) ので無視しておく.連結成分は左右を分離するので,各連結成分での場合の数をかけあわせて,並び順を考えればよい.
各連結成分については,基本的には葉の順序に対応する (deg(u) - deg'(u))! の積.さらに,連結成分内に葉でない頂点 (deg(u) >= 2) が 2 個以上あれば,左右の反転で異なるものができるので 2 倍する.

ミスした点は 2 倍できるかどうかの判定.deg' を使ってしまい混乱し,3 頂点の木を反転できるとしてしまった.

SRM 510 DIV 1

1000 から開き,残り 15 分で一旦 250 を解き,再び 1000 を解いて終了間際に提出したがすぐミスに気付いた.撃墜は 1 成功 1 失敗.
変数名に注意.

250: TheAlmostLuckyNumbersDivOne


a 以上 b 以下で,10 進法表記で桁に 4 と 7 以外は高々 1 回しか現れない整数の個数を求める.
1 <= a <= b <= 10^16.

すべて 4 か 7 なものが 2^17 個以下しかないのですべて数えても間に合う.再帰で書いた.

500: TheLuckyGameDivOne


10 進法表記で桁に 4 と 7 以外が現れない整数を lucky number という.
John は [a, b] に含まれる jLen 個の整数を含む区間を選び,その後 Brus は John の選んだ区間に含まれる bLen 個の整数を含む区間を選ぶ.この区間に含まれる lucky number の個数を,John は最大化しようとし Brus は最小化しようとする.結果含まれる個数を答える.
1 <= a <= b <= 10^10.

lucky number の個数 N は 2^11 個以下.Brus が選ぶ区間として考えるべきものは,John の区間の端にくっつけるか,[a, b] の端にくっつけるか,ある lucky number をぎりぎり含まない箇所.このうち最初の場合以外を,含まれる lucky number の個数とともに列挙する.John の選ぶ区間として考えるべきものは,[a, b] の端にくっつけるか,Brus の選びうる区間をぎりぎり含まない箇所.これらをすべて試すと O(N^2) となる.
区間の min を求めることになるので O(N log N) でも解ける.

l と r を 1 箇所間違えた.Brus の選ぶ区間の候補の数,の代わりに N と書いてしまった.

1000: TheLuckyBasesDivOne


10 進法表記で桁に 4 と 7 以外が現れない整数を lucky number という.
整数 n を B 進法 (B >= 2) で書いたとき桁に lucky number しか現れないような B の個数を求める.無限個あるならばそれを指摘.
1 <= n <= 10^16.

無限個あるのは n が lucky number であることと同値.さらに,そうでなければ B <= n.
n 以下の lucky number をすべて生成しておく.
B <= n < B^2 については,n = a[1] * B + a[0] とすると,a[1] < n^(1/2) かつ a[0] < n / a[1] を満たす lucky number a[1], a[0] をループで回してすべて試す.
B^2 <= n < B^3 については,n = a[2] * B^2 + a[1] * B + a[0] とすると,a[2] < n^(1/3) を満たす lucky number a[2] をループですべて回し,それらに対して (n / (a[2] + 1))^(1/2) < b <= (n / a[2])^(1/2) を満たす B をすべて試す.
B^3 <= n については,B <= n^(1/3) を満たす B をすべて試す.
これらを重複を生じないよう数える.返す型は long long となっているがすべて数えられる程度の個数しかない.
最大の実行時間は 900 ms 弱だった.

サンプルが弱く n < B^2 しか確認できない.
B^3 <= n について B の上限を n に依らない値に決め打ったが,B^2 <= n < B^3 に対して小さい B も数えてしまい,重複していた.また,B <= n < B^2 に対して a[1] と a[0] を回す変数 i と j を間違えた.

SRM 409 DIV 2

練習.

250: Stick


64 cm の棒があり,x cm 分を得るために以下の操作を繰り返す.
・持っている棒の長さの和が x 以下であればやめる.
・最短の棒を 2 つに分ける.
・分けた片方を捨てても和が x 以上であれば分けた片方捨てる.
操作が終了したときに持っている棒の本数を求める.

2 進法で大きい桁から作られていく.立っている bit を数えればよい.

500: OrderedSuperString


n 個の文字列 words[i] が与えられる.文字列 X であって,n 個の単調増加な index x[i] で X[x[i] .. $] が words[i] を prefix として持つようなものが存在するもののうち,最短のものの長さを求める.

words[i] を i の順に貪欲に繋げていく.繋げたところの index を持っていけばよい.

DIV 1 250 と共通.

1000: TeleportsNetwork


平面上の N 個の点が与えられる.点 0 以外の各点について,点 0 により近い点のうち最も近くにある点と辺を結ぶ (タイブレークあり).すると木ができるが,この木に高々 teleportCount 個のテレポートを配置し,点 0 へ向かうために通る辺の個数の最大値を最小化する.
N <= 50,teleportCount <= 4.

言われたとおりに木を作成し,Floyd-Warshall を回して O(N ^ (teleportCount + 1)).

最初,答の二分探索と DP の方が楽かと思ったが,根の方向に進むケースを見逃していてできていなかった.

TCO11 Round 1

2000 人中 850 人が Round 2 へ進出.
1000 → 500 → 250 の順に解いた.3 完と challenge 4 成功で 2 位.

250: TripleStrings


3 つの文字列 A, B, C に操作をして,(A, B, C) を (init, "", "") から (goal, "", "") にしたい.init と goal は同じ長さで 'o' と 'x' からなる.操作は,
・A の先頭の文字を B または C の末尾に付ける
・B または C の先頭の文字を A の末尾に付ける
のいずれか.操作の最小回数を求める.
解の存在を,「init と goal の 'o' の個数は等しい」として保証.

init から何文字か削って goal の prefix にならないといけないので,(それにかかる文字数) * 2 はかかる.一方削ったものは 'o' を B に 'x' を C に配れば適切な順番で拾えるのでこれが最小回数.

全部削るケースに注意.非自明だが,最小は長さ 4 で "ooxx", "oxox" など.

500: MuddyRoad


N マスからなる道があり,各マスには雨が降る確率が与えられる.一歩で 1 マスあるいは 2 マス進めるとして,雨が降ったマスに止まる回数を最小化を考える.この回数の期待値を求める.

(i, (マス i に来るための雨マスに止まる最小回数), (マス i + 1 に来るための雨マスに止まる最小回数)) を状態にとって DP した.O(N^3) で書いたが,実際にとり得る状態数は O(N^2) しかない.

1000: IPv444


N 人がいて,整数の 4 つ組を求めている.4 つのうち一部の成分を指定しており,それを満たすものをあげると一定の金額を支払う.各人には任意個あげてよい.[0, 999]^4 のそれぞれを 1 人以下に配り,もらえるお金を最大化.
N <= 50.

配るもののパターンは,各成分について,現れる数あるいはワイルドカードなので,高々 (N+1)^4 種類について考えればよい.マッチしている人の中から最大の金額の人を探す.全体で O(N^5) で,完全に N^5 回すと間に合わないが,「異なる成分を発見したら break」という自然な break と,「最初に金額でソートしておきマッチする人を見つけたら break」という枝刈りを入れることで,全成分全員ばらばら,が最悪ケースとなり (たぶん),測って OK だった.

50^5 なので微妙だがとりあえず組んだ.簡単すぎる気がしてゆっくりめにテストした.
最初の 3 成分について回して,マッチしているものに対して 4 成分目を拾ってくればそう複雑でなく O(N^4) にできる (たぶん).

«  | ホーム |  »

プロフィール

hos.lyric

Author:hos.lyric

 

最新記事

最新コメント

 

最新トラックバック

 

月別アーカイブ

カテゴリ

検索フォーム

 

 

RSSリンクの表示

リンク

ブロとも申請フォーム

QRコード

 

QR

 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。