题意:要求给出一个数N的余数系的三个排列A, B, C,其中使得对于任意的 i 满足(A[i] + B[i]) % N = C[i]。

例如N=5的时候有一下排列:

A: 1 4 3 2 0
B: 1 0 2 4 3
C: 2 4 0 1 3

解法:首先排列如果存在的话,肯定是不唯一的,因为可以随意交换A,B,C的相同两列使得结果仍然满足。对于一个给定的N,我们可以列出一下一张图:

横纵坐标反应了余数相加的情况:
0 1 2 3 4
1 2 3 4 0
2 3 4 0 1
3 4 0 1 2
4 0 1 2 3
只要取从左上到右下的对角线即可。

以上只能够保证N为奇数的时候有解,不足以说明白偶数为何无解。还有一种观点现在自己还证不出来:对于每一种合法的情况,A,B,C一定是按照某种规则增长的,也就是一个等差数列,只是每一位数都对N取模而已。那么如果公差d于N互质的话,能够在N步之内枚举完所有的余数,否则不能。

证:任何一个序列如果从0开始,那么序列就变为了0, d%N, 2*d%N ... i*d%N ... j*d%N...(N-1)*d%N 如果存在id % N = jd % N,那么N | (j-i)d,由于gcd(d, N) = 1 且 i-j < N,这显然是荒谬的。所以任意两个id%N, jd%N都是互质的,因为有N个数,所以也就取遍了所有的余数,而对于于N不互质的d,则无法推导出次结论,实际上只要 j-i = N/gcd(d,N)时,就有id%N = jd%N了,显然可以找到这样两个余数相同的数。

这也就是为什么上面取A,B序列公差均为1可以的原因了,因为两个公差为1的序列相加之后公差为2,而2与奇数N是互质的。因此还可以选择更多的方案来完成匹配。如果上面的假设成立,那么对于偶数N也是很好否定的,因为偶数N的A,B所取得两个公差一定要求都是奇数,而如此对于C而言则公差变成了偶数,此时N也为偶数,由于d于N不互质,也就无法构造出这样三个序列了。

现在我无法证明的就是为什么在对A做一个排序使其成为d=1的序列后,一定要求B也同样为一个等差序列。

代码如下:

#include <cstdlib>
#include <cstdio>
#include <cstring>
using namespace std;int main() {int N;while (scanf("%d", &N) != EOF) {if (!(N&1)) {puts("-1");continue;    }for (int i = 0; i < N; ++i) {printf(i == N-1 ? "%d\n" : "%d ", i);}for (int i = 0; i < N; ++i) {printf(i == N-1 ? "%d\n" : "%d ", i);}for (int i = 0; i < N; ++i) {printf(i == N-1 ? "%d\n" : "%d ", 2*i%N);}}return 0;
}

转载于:https://www.cnblogs.com/Lyush/archive/2013/05/13/3075939.html

CF#303A Lucky Permutation Triple 数论相关推荐

  1. CodeForces - 287C Lucky Permutation(构造)

    题目链接:点击查看 题目大意:构造一个合法的排列,满足 ppi=n−i+1p_{p_{i}}=n-i+1ppi​​=n−i+1 题目分析:因为第四个样例的存在降低了本题的难度,不然感觉还是有点难度的一 ...

  2. cf 1512 E. Permutation by Sum

    cf 1512 E. Permutation by Sum 题意: 我们定义排列的概念为:从1到n的整数组成的序列,每个数字只出现一次 现在给你n,l,r,s,让你构造一个长度为n的排列,使得其中的第 ...

  3. CF1768D Lucky Permutation

    给定整数 n 和一个 1∼n 的排列 p. 你可以对排列 p 进行下列操作任意次: 选择整数 i, j(1 ≤ i < j ≤ n),然后交换 pi, pj​ 的值. 你需要求出至少需要进行上述 ...

  4. Codeforces Round #183 (Div. 2) C

    思维题,想到就秒杀,没想到或者想错方向了那么就完蛋了 0 1 2 3 4 1 2 3 4 0 你就会发现是可以的. 我经历了很久错误的思维,找到了一些性质 1.  ai+bi的和一定为一串从(n/2) ...

  5. Codeforces Round #183 (Div. 2)

    A. Pythagorean Theorem II 暴力,\(O(n^2)\). B. Calendar 每个日期计算到0年1月1日的天数,相当于转化成前缀和形式. 闰年数计算\[\lfloor\fr ...

  6. linux 串口text模式安装,使用串口安装centos操作系统

    使用CSS3 Media Queries实现网页自适应 原文来源:http://webdesignerwall.com 翻译:http://xinyo.org 当今银屏分辨率从 320px (iPho ...

  7. CQUCQUPT联合狂欢赛小结

    概述:今天25道题,AC了11道,不到一半的题.惭愧惭愧.不过还是颇有收获的.就AC题目和今晚补的题做些小结 狂欢赛链接:http://acm.hust.edu.cn/vjudge/contest/v ...

  8. 数据库质疑和可疑是一样的吗_是时候质疑带回家的测试了

    数据库质疑和可疑是一样的吗 If you're in the programming market for over a year, you probably went through it. You ...

  9. 【背赛笔记 常用写法 模版】Python蓝桥杯备赛笔记记录 【建议收藏!】

    目录 Py常用算法技巧 与c++ stl对应结构 排序 heapq 栈 先进后出队列LifoQueue 优先级队列,每次取最小的一个元素PriorityQueue 双端队列deque ,用在bfs提高 ...

最新文章

  1. php.ini 中开启短标签
  2. Ubuntu中安装sqldeveloper出现的问题及其解决方法
  3. Slog64_项目上线之ArthurSlog个人网站上线3
  4. pycryptodom的源码安装
  5. Asp.net細微的效率提升
  6. 利用类的反射导入excel示例
  7. Angulary应用依赖里的zone.js
  8. Android之动画精讲一:从setTranslationX谈属性动画和view动画的区别
  9. 磁盘读写流程和网络读写流程
  10. MIT6.830 lab2 SimpleDB Operators 实验报告
  11. string 找出所有数字 index_【一天一大 lee】单调递增的数字 (难度:中等) Day20201215...
  12. 1078 最小生成树
  13. 【2016Esri全球用户大会主题亮点】GIS Apps的交响乐
  14. 图像处理库 FreeImage的简述
  15. Android Jetpack组件 DataStore的使用和简单封装
  16. WIN10 运行cmd显示“系统无法找到指定的路径”
  17. 如何使用AndriodStudio制作音乐播放器音乐列表界面和导入手机音乐资源
  18. MySQL篇【5】——约束
  19. 苹果发布黄色版 iPhone 14,定价 5999 元起;大神李沐被曝离职投身大模型创业;Atlassian 裁员 |极客头条
  20. 公关作用下的品牌建设

热门文章

  1. 一个js文件 多个html文件怎么打开,通过PHP在PhantomJs中打开多个html文件抛出语法错误...
  2. 最新html取消dynsrc属性无效,HTML属性标签2
  3. java 开发者异常处理_Java异常处理和设计
  4. linux 输出数据到csv,Linux-从外壳输出CSV文件
  5. chromium禁用ajax,页面加载时,jQuery AJAX不会在Chrome / Chromium中启动
  6. 20200713:动态规划复习day04
  7. android 手机固定mac地址吗,Android手机获取Mac地址的几种方法
  8. python性别只能为男或女_Pycaffe实践 1)分类:性别识别
  9. js中判断变量不为空或null
  10. ※部分VB文章汇总C※