时间限制: 1 Sec  内存限制: 1024 MB  Special Judge

如果你希望解锁美雪的手机,你需要回答30个问题,只有你非常关注美雪才能全部解答正确。而且,根
据"你"的不同,美雪的行为也是不一样的。对于不同的"你",答案相同的概率为3130。可以说,对于每个
不同的"你",都有一个唯一的美雪。
不过因为美雪现在心情很好,所以你只需要回答一个问题。给一个正整数n,请你输出一个n × n 的
方阵A,满足方阵的每一行,每一列都是一个1 ∼ n 的排列,并且对于所有的1 ≤ i < j ≤ n, 有
Ai,j ̸= Aj,i。
有解输出任意一个方案,否则输出“-1”(不含引号)。

Input
输入仅一行一个整数n(1 ≤ n ≤ 1000)。
Output
如果有解,输出n 行,每行n 个[1, n] 范围内的整数,第i行第j个数表示Ai,j;否则输出“-1”。
Example
standard input

3

standard output
1 3 2
2 1 3
3 2 1

题解:

有三种情况:
1、n 是奇数,我们可以构造如下的方阵:
1, 2, 3, ... n-2, n-1, n
n, 1, 2, ... n-3, n-2, n-1
...
3, 4, 5, ... n, 1, 2
2, 3, 4, ... n-1, n, 1
可知对于所有的i,j (1<=i<j<=n), A[i][j]+A[j][i]=n+2, 所以A[i][j] 不可能等于A[j][i]。
2、n=2,无解。
3、n 为大于2 的偶数:当n = 4 的时候,有这样一组解:
1, 2, 3, 4
4, 3, 2, 1
2, 1, 4, 3
3, 4, 1, 2
当n>4 的时候,我们假设n=2k (k>2), 并且当n=k 时存在一组合法解,那么我们构造n=2k 时的解:
记A(t) 为n=t 时的一组解。首先,我们先令A(2t) 为:
A(k), A(k)
A(k), A(k)
之后, 我们在左上和右下的A(k) 中给所有元素加上k:
A(k)+k, A(k)
A(k), A(k)+k
之后,我们把右上的A(k) 沿着它的主对角线翻转一下并记为A’(k),此时我们可以得到:对于所有在
A’(k) 中的A(2k)[i][j],有A(2k)[i][j] = A(2k)[j][i],具体如下。
A(k)+k, A’(k)
A(k), A(k)+k
最后, 我们只要把左下的A(k) 的值都移一位就好。(1->2, 2->3, ..., k->1):
A(k)+k, A’(k)
A(k)+1, A(k)+k
这样n=2k 的解就构造出来了。

#include <cstdio>
#include <vector>using namespace std;const int MAXN = 1005;int board[MAXN][MAXN];inline void BuildFour(){board[1][1] = 1;board[1][2] = 2;board[1][3] = 3;board[1][4] = 4;for(int i=1 ; i<=4 ; ++i)board[2][i] = 4+1-board[1][i];board[3][1] = 2;board[3][2] = 1;board[3][3] = 4;board[3][4] = 3;for(int i=1 ; i<=4 ; ++i)board[4][i] = 4+1-board[3][i];
}inline void BuildOdd(int i){int sum = (i*(i+1))/2;for(int j=1 ; j<=i ; ++j){int t = j;for(int k=1 ; k<=i ; ++k){board[k][t] = j;++t;}}for(int j=2 ; j<=i ; ++j){int tt = 0;for(int k=2 ; k<=i ; ++k)tt += board[j][k];int t = 1;for(int k=j ; k<=i ; ++k){board[k][t] = sum - tt;++t;}}
}inline void BuildEven(int x){int t = x;while(t%2 == 0 && t != 4)t /= 2;if(t == 4){BuildFour();}else {BuildOdd(t);}for(int i=t ; i<x ; i*=2){for(int j=i+1 ; j<=i*2 ; ++j){for(int k=i+1 ; k<=i*2 ; ++k){board[j][k] = board[j-i][k-i]+i;}}for(int j=1 ; j<=i ; ++j){for(int k=i+1 ; k<=i*2 ; ++k){board[j][k] = board[k-i][j];}}for(int j=i+1 ; j<=i*2 ; ++j){for(int k=1 ; k<=i ; ++k){board[j][k] = board[j-i][k]+1;if(board[j][k] == i+1)board[j][k] = 1;                  }}for(int j=1 ; j<=i ; ++j){for(int k=1 ; k<=i ; ++k)board[j][k] += i;}                  }
}inline void Print(int x){for(int i=1 ; i<=x ; ++i){for(int j=1 ; j<x ; ++j)printf("%d ",board[i][j]);printf("%d\n",board[i][x]);}
}int main(){int N;while(scanf("%d",&N) == 1){if(N == 1)printf("1\n");else if(N == 2)printf("-1\n");else if(N&1){BuildOdd(N);Print(N);}else {BuildEven(N);Print(N);}}return 0;
}//
//1 2 3 4
//4 3 2 1
//2 1 4 3
//3 4 1 2
//
/**************************************************************Problem: 1057User: 2016203524Language: C++Result: 正确Time:252 msMemory:4904 kb
****************************************************************/

CCPC-WannaFly-Camp 1057: Kimi to Kanojo to Kanojo no Koi(構造)相关推荐

  1. 2019 CCPC Wannafly Camp Day 1

    自闭感受 第一次参加这种线下的算法Camp,不得不说和队友都是内心非常的小鸡动.上午开幕式wls讲了一堆话,差不多就是一起呲逼加鸡汤吧 (哈哈希望wls不要打死我) .下午就是day训练赛了,因为一个 ...

  2. 阔力梯的树(2020 CCPC Wannafly Winter Camp Day2 Div.12 )dsu on tree

    题解: dsu on tree dsu on tree的基本步骤就不说了 看到这题询问结点的子树问题,而且询问时离线的,首先想到的dsu on tree的这个trick. 本题的难题就是如何维护结点所 ...

  3. 2020 CCPC Wannafly Winter Camp Day3 部分题解(ACEFG)

    查看题目 A 黑色气球 题意: n个气球,每个气球高度为正整数.给你每两个气球之间的高度和,还原出所有气球的高度,保证答案唯一. 解题思路: 签到题,因为高度的范围不大,直接枚举第一个气球的高度,检测 ...

  4. 2020 CCPC Wannafly Winter Camp Day2 Div.12——A 托米的字符串【构造、数学】

    题目传送门 题目描述 托米有一个字符串,他经常拿出来玩.这天在英语课上,他学习了元音字母 a , e , i , o , u {a,e,i,o,u} a,e,i,o,u 以及半元音 y {y} y . ...

  5. 2020 CCPC Wannafly Winter Camp Day6 M—自闭——模拟

    链接:https://ac.nowcoder.com/acm/contest/4137/M 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

  6. 2020 CCPC Wannafly Winter Camp Day7 K 修炼

    题意: 一个游戏,规则如下: 有六个值 v 1 , v 2 , a 1 , a 2 , b 1 , b 2 v_1,v_2,a_1,a_2,b_1,b_2 v1​,v2​,a1​,a2​,b1​,b2 ...

  7. 2020 CCPC Wannafly F.采蘑菇的克拉莉丝(轻重链的应用)

    LINK 首先有一个很nativenativenative的想法 因为一个节点到父亲节点的边是容易统计贡献的,只需要算出不在子树内的蘑菇数量即可 现在只需要统计子树内蘑菇的贡献即可 当vvv节点加上x ...

  8. 【Wannafly Camp day 2】【Legilimens Contest 3】

    >.< 感谢齐天大圣们带我飞   CF蓝名选手打得很开心 A题 [Tommy的字符串]算贡献签到题,我写完这个题的时候我们已经有人过了全场无人会题了.13:02我会F了.DFS序后在BIT ...

  9. ACM职业生涯回忆录学习方法感悟

    2018年的5月,我在西安邀请赛打铁,陕西省赛三等奖.2019年的5月,还是在西工大,邀请赛拿金,圆满退役.(不过省赛才第十不是很满意呜呜呜) 2018年年底区域赛赛季结束的时候,我被问到明年区域赛是 ...

最新文章

  1. html5的video怎么把里面的控制器移出来_日产Pro-Pilot的ADAS控制器拆解
  2. java 数组map_java中 数组 list map之间的互转
  3. what's new in vs 2005
  4. 【JAVA核心知识】6.1: JAVA IO基础
  5. Mysql学习总结(35)——Mysql两千万数据优化及迁移
  6. thinkphp5 异步调用方法_详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
  7. Json——使用Json jar包实现Json字符串与Java对象或集合之间的互相转换
  8. linux/unix下telnet提示Escape character is '^]'的意义
  9. sql92和sql99的区别
  10. Vue项目中 实现ElementUi框架el-select拼音搜索功能
  11. java数组排序方法
  12. chrome Axure插件(Mac版)
  13. 苹果手机声音突然变小是怎么回事_苹果手机听筒声音小怎么回事?
  14. Component template should contain exactly one root element. If you are using v-if on multiple eleme
  15. 48 款数据可视化分析工具大集合!
  16. 【Linux】Ubuntu运行环境搭建
  17. 企业与个人短视频变现技巧
  18. 线性模型:AR、MA、ARMA、ARMAX、ARX、ARARMAX、OE、BJ等
  19. htcvr设备计算机配置,HTCVive电脑配置介绍
  20. 三句半新闻:爱好和付出是一个正反馈的过程

热门文章

  1. 自己部署 Docker Kong
  2. VBS msgbox
  3. 爬虫能做什么有意思的事?
  4. h1z1加载服务器锁定状态,h1z1进不去游戏锁定状态出错 | 手游网游页游攻略大全...
  5. 一键图片去水印工具,两秒去除水印!
  6. 车路协同冬去春来,自动驾驶来到分岔口?
  7. 可视化例子(11)——ECharts line3D制作三维折线图
  8. java基本编程结构
  9. python制作简单动画_python制作演示动画
  10. @SuppressLint(NewApi)