リンク:https://codeforces.com/contest/1173/problem/B
質問の意味:
Nauuoはチェスを愛している女の子です。
ある日、彼女は必要が自分でゲームを発明した n個で再生するn個のチェスの駒を M × m個の mchessboard×メートル。行と列から番号付けされている 1 1に m個の M。我々は、の交点のセルを表し 、Rは、R行と CのようなC列目 (R 、C )(R、C)。
ゲームの目標は、配置することで 、Nから番号チェスの駒nは 1に1を n個のnチェス盤の上に、 I i番目の部分は、上にあり (R I 、C I )以下のルールが満たされている間、(RI、CI):のために作品のすべてのペア I iと jは jを、 | R I - R J | + | C I - のC J | お知らせ≥ | I - J | | RI-RJ | + | CI-CJ |≥| I-J |。ここで | X || X | 絶対値を意味し 、Xの Xを。
しかし、Nauuoはチェス盤が小さすぎたので、時々、彼女は解決策を見つけることができなかったことを発見しました。
彼女が見つけたい 彼女は置くことができた上で最小のチェス盤 のnルールに従ってn個のピースを。
彼女はまた、そのようなチェス盤に駒を配置する方法を疑問に思います。あなたは彼女を助けることはできますか?
アイデア:
左上隅のX * Xマトリックス構造は、nは1入れて、右下隅を配置します
(NX)=(NX)以来
したがって、行列の最初の行は1-Xを満たすために、最後の行は、(X + 1)N-右から左に充填されています。
コード:
#include <ビット/ STDC ++ H> 名前空間STDを使用して、 typedefの長い長いLL。 const int型MAXN = 1E3 + 10。 const int型MOD = 1E9 + 7。 N INT、M、K、T。 INT X、Y。 INT A [MAXN] [MAXN]。 メインINT() { CIN >> N。 IF(N == 1) { COUT << 1 << ENDL。 coutの<< 1 << '' << 1 <<てendl; 0を返します。 } ため(; iは、i = 2は、int型<N =、iは++) IF((I-1)* 2> = N-1) { X = Y = I。 ブレーク; } ため(INT i = 1; iは= xを<; iは++) A [1]〜[I] = I。 - (v-- I; I> = 1 && V> xはV = N、I = xをINT)用 A [X] [I] = V。 coutの<< X <<てendl; 以下のために(INT i = 1; iが= xを<; I ++) のための(INT J = 1; J <= Y; J ++) IF([I]、[J] <= N && A [I] [J]> = 1) COUT << I << '' << J <<てendl; 0を返します。 }