美團杯2020 平行四邊形 原根

2021-10-06 07:13:06 字數 1506 閱讀 5152

蒜斜非常喜歡下圍棋。自從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 每組資...