美团杯2020 - 平行四边形(原根)
题目链接:点击查看
题目大意:
蒜斜非常喜欢下围棋。自从AlphaOg面世以来,他就立志一定要研究出AlphaOg的破绽。 终于,他发现当AlphaOg遇到一种特殊局面后,它的神经网络会自动输出“投降”!
随着进一步的研究,蒜斜发现这种局面有着更一般的特性,不仅仅局限于固定大小棋盘。 具体来说,当棋盘大小是 nn(n+1n+1 是一个质数)且棋盘上恰好有 nn 个棋子的时候,如果这些棋子的位置满足下列条件,那么 AlphaOg 就会直接投降。假设第 ii 个棋子的位置是点 PiPi,处在第 xixi 行第 yiyi 列,那么这些坐标需要满足:
- 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。否则输出 nn 行,每行两个整数 (xi,yi)(1≤xi≤n,1≤yi≤n),表示第 ii 个棋子的坐标。如果坐标方案不唯一,你只需要输出任意一种。
样例一
input
1
4
output
1 1
3 2
4 3
2 4
限制与约定
Small Task: n≤12n≤12。
Large Task: n≤1000n≤1000。
时间限制:1s1s
空间限制:512MB
题目分析:首先需要知道原根的定义:
假设一个数g是P的原根,那么g^i mod P的结果两两不同,且有 1<g<P,0<i<P,归根到底就是g^(P-1) = 1 (mod P)当且仅当指数为P-1的时候成立.(这里P是素数)。(百度百科)
换句话说,质数 P 一定有原根
既然题目提示了 n + 1 是一个质数,结合到原根上去,不难发现 g ^ i % ( n + 1 ) 的集合符合 1 ~ n 的一个排列
这样情况一和情况二都满足了,只需要证明情况三也满足就ok了
任取四个点 A( a , g^a ) , B( b , g^b ) , C( c , g^c ) , D( d , g^d ) ,如果四个点想要构成平行四边形的话,那么需要同时满足下面两个条件,且共用的点至多有一个:假设 b < a 且 d < c
- a - b == c - d
- g^a - g^b == g^c - g^d
当 a - b == c - d 时,g^a - g^b = g^b * ( g^( a - b ) - 1 ) ,同理 g^c - g^d = g^d * ( g^( c - d ) - 1 ),因为 a - b == c - d ,所以 g^b * ( g^( a - b ) - 1 ) 与 g^d * ( g^( c - d ) - 1 ) 中的 g^( a - b ) == g^( c - d ) ,所以将括号约分之后可以得到 g^b == g^d,再带回原式 g^a - g^b == g^c - g^d 中,可以得出 g^a == g^c,根据原根的定义可知,此时 b == d 且 a == c ,也就是点 A 与点 C 重合,且点 B 与点 D 重合,无法做到既是两边平行且相等,同时至多只有一个点共用,所以情况 3 成立
综上,只需要让 x 坐标为 i ,y 坐标为 g^i%P 即可,至于原根 g ,可以根据其定义暴力求解
代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e3+100;bool vis[N];int find_root(int mod)
{for(int i=2;i<mod;i++){memset(vis,false,sizeof(vis));bool flag=true;int x=i;for(int j=1;j<=mod-1;j++){if(vis[x]){flag=false;break;}vis[x]=true;x=x*i%mod;}if(flag)return i;}
}int main()
{
#ifndef ONLINE_JUDGE
// freopen("input.txt","r",stdin);
// freopen("output.txt","w",stdout);
#endif
// ios::sync_with_stdio(false);int w;cin>>w;while(w--){int n;scanf("%d",&n);int mod=n+1;int rt=find_root(n+1);int x=rt;for(int i=1;i<=n;i++){printf("%d %d\n",i,x);x=x*rt%mod;}}return 0;
}
美团杯2020 - 平行四边形(原根)相关推荐
- 美团杯2020:查查查乐乐(dp)
A. [美团杯2020]查查查乐乐 "查查查乐乐"是一段古老神秘的咒语,只有被选中的魔法师才有资格使用这一段咒语并享用它所带来的力量:而如果这段咒语出现在了不具资格的魔法师的口中, ...
- 【美团杯2020】字符串处理:查查查乐乐
美团杯:签到题 我:一个小时自闭题 查查查乐乐 [题目] "查查查乐乐"是一段古老神秘的咒语,只有被选中的魔法师才有资格使用这一段咒语并享用它所带来的力量:而如果这段咒语出现在了不 ...
- 美团杯2020 - 半前缀计数(后缀自动机)
题目链接:点击查看 题目大意: 蒜斜刚来PKU的时候还不知道有"北大算协"这个社团,因此他总是觉得周围的人在偷偷议论着他,比如说: "算协(注:非蒜斜)举办的活动好有趣啊 ...
- 【美团杯2020】114514 解题报告
原题地址:http://uoj.ac/contest/53/problem/529 这题说实话我觉得有点玄学.我的方法是从左到右贪心,优先给每个4分配两个1,1不够的时候就再取出来.虽然我也意识到思路 ...
- 【UOJ529】【美团杯2020】114514
题目链接 点击打开链接 题目解法 可以发现,在给定的序列 114514 114514 114514 中,每个 4 4 4 之前均有一个 1 1 1 . 因此,从后向前,将每个 4 4 4 与前方最近的 ...
- “华为云杯”2020深圳开放数据应用创新大赛线上推介会成功举办,让深圳大数据在全球“跑”起来...
4月30日下午,"华为云杯"2020深圳开放数据应用创新大赛第三场线上推介会完美落幕.至此,从4月23日开始的三场云端推介会全部结束,全球各数字平台总观看量1000多万人次.深圳市 ...
- [羊城杯 2020]GMC
[羊城杯 2020]GMC 题目 from Crypto.Util.number import getPrime,bytes_to_long,getRandomNBitInteger from sec ...
- [羊城杯 2020]Power
[羊城杯 2020]Power 题目 from Crypto.Util.number import * import gmpy2 from secret import flagp = getPrime ...
- [羊城杯 2020]RRRRRRRSA
[羊城杯 2020]RRRRRRRSA 题目 import hashlib import sympy from Crypto.Util.number import *flag = 'GWHT{**** ...
最新文章
- IBM 365服务器安装serverraid-7k控制器
- Apache Mina开发手册
- OpenCV基础篇之读取显示图片
- 【BZOJ3172】单词(AC自动机)
- 用vscode编写静态页面_开发中实用的VSCode插件推荐
- CSDN的常用文本设置(字体大小红色)
- 计算出linux cache,关于计算buffer cache hit rate的精确算法
- android 常用依赖库
- Linux进程管理命令:nohup、、jobs、fg、bg、ps、kill
- pytorch入门——构建神经网络
- 设置代理后谷歌浏览器无法使用代理
- 银行从业中级系列课程之——银行管理(二)监管概述,监管指标和监测指标
- VPC虚拟云端局域网
- 1024 祝我们快乐
- 编码方法论:设计数据结构
- SuperMap GIS BIM类型数据优化 QA
- 浪潮存储与虚拟服务器连接失败,浪潮-异构虚拟化存储研究(示例代码)
- 追剧补番达人必备五款APP排行
- 大数据之------------数据中台
- Scala版本冲突--java.lang.NoSuchMethodError:scala.collection.immutable.HashSet$.empty()Lscala/collection/