CCPC-WannaFly-Camp 1057: Kimi to Kanojo to Kanojo no Koi(構造)
时间限制: 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(構造)相关推荐
- 2019 CCPC Wannafly Camp Day 1
自闭感受 第一次参加这种线下的算法Camp,不得不说和队友都是内心非常的小鸡动.上午开幕式wls讲了一堆话,差不多就是一起呲逼加鸡汤吧 (哈哈希望wls不要打死我) .下午就是day训练赛了,因为一个 ...
- 阔力梯的树(2020 CCPC Wannafly Winter Camp Day2 Div.12 )dsu on tree
题解: dsu on tree dsu on tree的基本步骤就不说了 看到这题询问结点的子树问题,而且询问时离线的,首先想到的dsu on tree的这个trick. 本题的难题就是如何维护结点所 ...
- 2020 CCPC Wannafly Winter Camp Day3 部分题解(ACEFG)
查看题目 A 黑色气球 题意: n个气球,每个气球高度为正整数.给你每两个气球之间的高度和,还原出所有气球的高度,保证答案唯一. 解题思路: 签到题,因为高度的范围不大,直接枚举第一个气球的高度,检测 ...
- 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 . ...
- 2020 CCPC Wannafly Winter Camp Day6 M—自闭——模拟
链接:https://ac.nowcoder.com/acm/contest/4137/M 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...
- 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 ...
- 2020 CCPC Wannafly F.采蘑菇的克拉莉丝(轻重链的应用)
LINK 首先有一个很nativenativenative的想法 因为一个节点到父亲节点的边是容易统计贡献的,只需要算出不在子树内的蘑菇数量即可 现在只需要统计子树内蘑菇的贡献即可 当vvv节点加上x ...
- 【Wannafly Camp day 2】【Legilimens Contest 3】
>.< 感谢齐天大圣们带我飞 CF蓝名选手打得很开心 A题 [Tommy的字符串]算贡献签到题,我写完这个题的时候我们已经有人过了全场无人会题了.13:02我会F了.DFS序后在BIT ...
- ACM职业生涯回忆录学习方法感悟
2018年的5月,我在西安邀请赛打铁,陕西省赛三等奖.2019年的5月,还是在西工大,邀请赛拿金,圆满退役.(不过省赛才第十不是很满意呜呜呜) 2018年年底区域赛赛季结束的时候,我被问到明年区域赛是 ...
最新文章
- html5的video怎么把里面的控制器移出来_日产Pro-Pilot的ADAS控制器拆解
- java 数组map_java中 数组 list map之间的互转
- what's new in vs 2005
- 【JAVA核心知识】6.1: JAVA IO基础
- Mysql学习总结(35)——Mysql两千万数据优化及迁移
- thinkphp5 异步调用方法_详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
- Json——使用Json jar包实现Json字符串与Java对象或集合之间的互相转换
- linux/unix下telnet提示Escape character is '^]'的意义
- sql92和sql99的区别
- Vue项目中 实现ElementUi框架el-select拼音搜索功能
- java数组排序方法
- chrome Axure插件(Mac版)
- 苹果手机声音突然变小是怎么回事_苹果手机听筒声音小怎么回事?
- Component template should contain exactly one root element. If you are using v-if on multiple eleme
- 48 款数据可视化分析工具大集合!
- 【Linux】Ubuntu运行环境搭建
- 企业与个人短视频变现技巧
- 线性模型:AR、MA、ARMA、ARMAX、ARX、ARARMAX、OE、BJ等
- htcvr设备计算机配置,HTCVive电脑配置介绍
- 三句半新闻:爱好和付出是一个正反馈的过程