問題一覧 > 通常問題

No.2353 Guardian Dogs in Spring

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / スペシャルジャッジ問題 (複数の解が存在する可能性があります)
タグ : / 解いたユーザー数 143
作問者 : 👑 AngrySadEight / テスター : kumakuma Shirotsume 👑 seekworser
13 ProblemId : 9391 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2023-05-12 09:54:42

問題文

NN 体の狛犬が,xyxy 座標上にいます.i(1iN)i(1 \leq i \leq N) 体目の狛犬は座標 (xi,yi)(x_i, y_i) におり,はじめ全ての狛犬は xx 軸の正の向きを向いています.

2 体の狛犬は,次の条件を満たしているときに,向かい合っている狛犬の組となります.

  • 2 体の狛犬は,互いに一方がもう一方の狛犬の方向を向いている.
  • 2 体の狛犬の間を線分で結んだとき,その線分上にほかの狛犬はいない.

あなたは,全ての狛犬に対し,向きを自由に変えることができます.向かい合っている狛犬の組の数を最大化してください.

制約

  • 入力はすべて整数である.
  • 2N80002 \leq N \leq 8000
  • 0xi,yi80000 \leq x_i, y_i \leq 8000
  • (xi,yi)(xj,yj)(ij)(x_i, y_i) \neq (x_j, y_j)(i \neq j)

入力

入力は以下の形式で標準入力から与えられる.

NN
x1x_1 y1y_1
x2x_2 y2y_2
\cdots
xNx_N yNy_N

出力

向かい合っている狛犬の組の数を KK とし,以下の形式で K+1K+1 行出力せよ.すなわち,

  • 11 行目には,向かい合っている狛犬の組の数を出力せよ.
  • 22 行目から K+1K+1 行目には,向かい合っている狛犬の番号の組 (z1,w1),(z2,w2),,(zK,wK)(z_1, w_1), (z_2, w_2), \dots, (z_K, w_K) を,各行に一組ずつ出力せよ.

KK
z1z_1 w1w_1
z2z_2 w2w_2
\cdots
zKz_K wKw_K

サンプル

サンプル1
入力
3
1 1
2 1
3 2
出力
1
1 2
      

以下では,ii 体目の狛犬を以下では「狛犬 ii 」と呼びます.

狛犬の配置と,向かせる向きは下の図のようになります.

狛犬 11 と狛犬 22 を向かい合わせるように配置すると,向かい合っている狛犬の組は 11 組でき,これが最大となります.

残った狛犬 33 を狛犬 22 の方向に向かせることもできますが,狛犬 22 が狛犬 33 の方向を向いていないため,これは向かい合っている狛犬の組とはならないことに注意してください.

サンプル2
入力
4
1 1
2 2
3 3
4 2
出力
2
1 4
2 3

狛犬の配置と,向かせる向きは下の図のようになります.

狛犬 11 と狛犬 44,狛犬 22 と狛犬 33 を向かい合わせるように配置すると,向かい合っている狛犬の組は 22 組でき,これが最大となります.

一方,以下のような出力は不正解となります.

2
1 3
2 4

この場合,狛犬 11 と狛犬 33 を結ぶ線分上に狛犬 22 がいるため,条件を満たさなくなってしまいます.

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。