Codeforces.487C.Prefix Product Sequence(构造)
题目链接
\(Description\)
对于一个序列\(a_i\),定义其前缀积序列为\(a_1\ \mathbb{mod}\ n,\ (a_1a_2)\ \mathbb{mod}\ n,...,(a_1a_2...a_n)\ \mathbb{mod}\ n\)。
给定\(n\),求一个\(n\)的排列,使得该排列的前缀积序列是\([0,1,2,...,n-1]\)的一个排列。无解输出\(NO\)。
\(n\leq10^5\)。
\(Solution\)
考虑无解的情况。因为\(n!\equiv0\ (\mathbb{mod}\ n)\),所以\((n-1)\not\equiv0\ (\mathbb{mod}\ n)\)。
\(n\)为质数显然可以满足。否则设\(n=pq\)。
若\(p\neq q\),那么有\((n-1)!\equiv0\ (\mathbb{mod}\ n)\),GG了。
若\(p=q\),当\(n>4\)时,\(2p<n\),所以也有\((n-1)!\equiv0\ (\mathbb{mod}\ n)\),GG。
所以\(n\)为大于\(4\)的合数时无解。特判一下\(n=4\)。
首先\(a_1\)要填\(1\),\(a_n\)要填\(n\)。
考虑能不能直接让前缀积序列变成\(1,2,...,0\)。那么\(a_i=\frac{i}{i-1}\ \mathbb{mod}\ n,\ i>1\)。
只需要判断是否有\(\frac{a}{a-1}=\frac{b}{b-1},\ 1\lt a\neq b\lt n\)。
稍微化一下,\(\frac{a}{a-1}=1+\frac1a,\ \frac{b}{b-1}=1+\frac1b\),而我们知道每个数的逆元是唯一的,所以这么做就OK啦。
//46ms 600KB
#include <cstdio>
#include <algorithm>
typedef long long LL;
const int N=1e5+5;int A[N],inv[N];bool IsPrime(int x)
{int t=0;for(int i=2; x!=1; ++i)while(!(x%i)){x/=i;if(++t>1) return 0;}return 1;
}int main()
{int n; scanf("%d",&n);if(n==4) return printf("YES\n1\n3\n2\n4\n"),0;if(!IsPrime(n)) return puts("NO"),0;A[1]=1, A[n]=n, inv[1]=1;for(int i=2; i<n; ++i) inv[i]=1ll*(n-n/i)*inv[n%i]%n, A[i]=1ll*i*inv[i-1]%n;puts("YES");for(int i=1; i<=n; ++i) printf("%d\n",A[i]);return 0;
}
转载于:https://www.cnblogs.com/SovietPower/p/10518469.html
Codeforces.487C.Prefix Product Sequence(构造)相关推荐
- Codeforces 26B. Regular Bracket Sequence
Codeforces 26B. Regular Bracket Sequence 传送门:https://codeforces.com/problemset/problem/26/B 题目大意: 其实 ...
- Codeforces 1462 A. Favorite Sequence
Codeforces 1462 A. Favorite Sequence 思路分析: 看着题怪长,其实就是类似与回文字符串,搞一个双指针就好了 AC代码: #include <iostream& ...
- CodeForces - 1364C Ehab and Prefix MEX(贪心+构造)
题目链接:点击查看 题目大意:给出一个数组 a ,要求构造一个数组 b ,使得 a[ i ] = MEX{ b[ 1 ] , b[ 2 ] , ... b[ i - 1 ] , b[ i ] },a[ ...
- Codeforces C1. Prefix Flip (Easy Version) (二进制串 / 模拟 / 构造) (Roun #658 Div.2)
传送门 题意: 给出两个长度为n的二进制串a和b,你每次可选取一段前缀子串取反并翻转(即:10010 -> 01101 -> 10110).已知在3 * n次操作内一定能将a变成b.先让你 ...
- 【UVA/Codeforces】1584 Circular Sequence / 792B Counting-out Rhyme(就是一个圈儿...)
https://vjudge.net/problem/UVA-1584 1584 Circular Sequence 输入一个字符串,可以以字符串中任意一个字母作为起始,输出字典序最小的那个字符串 两 ...
- Codeforces 1276C/1277F Beautiful Rectangle (构造)
题目链接 http://codeforces.com/contest/1276/problem/C 题解 嗯,比赛结束前3min想到做法然后rush不出来了--比赛结束后又写了15min才过-- 以下 ...
- Codeforces 1246D/1225F Tree Factory (构造)
题目链接 https://codeforces.com/contest/1246/problem/D 题解 首先考虑答案的下界是\(n-1-dep\) (\(dep\)为树的深度,即任何点到根的最大边 ...
- Codeforces 798D Mike and distribution (构造)
题目链接 http://codeforces.com/contest/798/problem/D 题解 前几天的模拟赛,居然出这种智商题..被打爆了QAQ 这个的话,考虑只有一个序列怎么做,把所有的排 ...
- CodeForces - 1332B Composite Coloring(数论+构造)
题目链接:点击查看 题目大意:给出 n 个合数,每个数不超过 1000 ,现在要求给每个数涂上颜色,使得相同颜色的任意两个数的 gcd 都大于 1 ,现在问在总颜色数不超过 11 种的情况下,构造出一 ...
最新文章
- 安全报告显示2015年DDoS攻击强度创下新纪录
- CCNP视频教程下载全集
- SpringBoot - 优雅的实现【应用启动参数校验】
- mysql开创_MySQL创始人打造MariaDB 全面兼容MySQL 5.1
- C# 无法识别的转义序列
- windows 和 linux服务器环境下j2sdk 的安装和环境设置
- svn: E155036: Please see the ‘svn upgrade‘
- jQuery实现清空table表格除首行外的所有数据
- java eclipse中修改Web项目的URL访问路径
- IIS出现问题报CS0016
- «构建并破坏它»:某些算法如何生成验证码,而另一些则如何破解
- 火狐上如何使用谷歌翻译插件_将Google翻译功能添加到Firefox
- iphone 模拟器截图
- PS时间轴制作动态图
- MySQL与MariaDB性能比拼
- 更改PPT的模板名称
- C·cJSON库函数--cJSON_GetObjectItem
- HTTP返回代码 201 304 404 500等代表的含义
- Linux菜鸟学习笔记
- 常见的深度学习图像处理数据集下载
热门文章
- 一些linux下的性能监测工具
- javascript对象之window对象详解
- 对某课程的建议和意见_2021年河南专升本专科专业对照和考试课程征求意见
- android+图标闪烁动画,如何在android中闪烁通知图标? [DONE]
- php语句中两个if语句,如何在PHP中组合两个IF语句
- python画指数函数图像_python实现画出e指数函数的图像
- 【Linux】多线程中使用fork()
- PCL:点云特征描述子3D_object_recognition_(descriptors)
- Ubuntu virtualbox
- 【深度学习理论】(2) 卷积神经网络