蒜斜非常喜歡下圍棋。自從alphaog面世以來,他就立志一定要研究出alphaog的破綻。 終於,他發現當alphaog遇到一種特殊局面後,它的神經網路會自動輸出「投降」!
隨著進一步的研究,蒜斜發現這種局面有著更一般的特性,不僅僅侷限於固定大小棋盤。 具體來說,當棋盤大小是 n(n+1 是乙個質數)且棋盤上恰好有 n 個棋子的時候,如果這些棋子的位置滿足下列條件,那麼 alphaog 就會直接投降。假設第 i 個棋子的位置是點 pi,處在第 xi 行第 yi 列,那麼這些座標需要滿足:
x1 至 xn 是 1−n 的排列。
y1 至 yn 是 1−n 的排列。
這些點之間不構成平行四邊形(包括退化)。即對於任何兩個不完全相同的棋子對 (pa,pb),(pc,pd)(允許它們之間共用至多乙個棋子),線段 papb 與 pcpd 要麼長度不同,要麼所在的直線不平行且不重合。
憑藉這項發現,蒜斜榮獲了「北大算協吉祥物」的稱號。 如果你也能找出一種合法方案,蒜斜的稱號就是你的了!
輸入格式
輸入第一行包含乙個整數 t(1≤t≤10),表示資料組數。
對於每組資料,輸入第一行包含乙個整數 n(4≤n≤1000),保證 n+1 是乙個質數。
輸出格式
對於每組資料,如果無解輸出一行乙個整數 -1。否則輸出 n 行,每行兩個整數 (xi,yi)(1≤xi≤n,1≤yi≤n),表示第 i 個棋子的座標。如果座標方案不唯一,你只需要輸出任意一種。
樣例一
input14
output
1 13 2
4 32 4
限制與約定
small task: n≤12。
large task: n≤1000。
時間限制:1s
空間限制:512mb
乙個n*n棋盤(n+1為奇質數)每行和每列有且只有乙個棋子,且沒有四個棋子可以構成乙個平行四邊形,求任意一組解
先求出模n+1的原根g,答案就是(1,g mod(n+1)),(2,g2 mod(n+1)),(3,g3 mod(n+1))…(n,gn mod(n+1))
正確性證明:
#include.h>
using namespace std;
const int maxn =
1e3+9;
long long qui_pow
(long long a,long long n,long long mod)
return ans;
}bool judge
(long long a,long long n)
return1;
}int main()
}for
(i =
1;i<=n;i++)}
return0;
}
525 美團杯2020 平行四邊形 原根
既然x和y都是排列的話,我們不妨讓x先公升序從1 n如此輸出,這樣只用管y了。如果在不要求退化平行四邊形的時候,我們可以用1,n,2,n 1,3,這樣的不斷的兩邊互取的方式來完成,但是本題卻要求求乙個同時還要不滿足退化的平行四邊形的。於是這裡引入了原根的思想,什麼是原根,就是乙個可以保證 快速求原根...
平行四邊形
請小夥伴們對自己ac的題目進行標記,注意每人只能標記一次!不知道的不要標記,惡意標記者將 賬號!時間限制 3 sec 記憶體限制 128 mb 提交 狀態 題目描述 求平面上n個點構成的平行四邊形個數。輸入 一行乙個數n。接下來n行,每行兩個數x,y,表示這個點的座標為 x,y 保證任意兩點不重合,...
平行四邊形邊數
在乙個平面內給定n個點,任意三個點不在同一條直線上,用這些點可以構成多少個平行四邊形?乙個點可以同時屬於多個平行四邊形。input 多組資料 10 處理到eof。每組資料第一行乙個整數n 4 n 500 接下來n行每行兩個整數xi,yi 0 xi,yi 1e9 表示每個點的座標。output 每組資...