【构造】CF12E Start of the season(神奇的构造)难度⭐⭐⭐

CF12E Start of the season

题目描述
在伯兰的足球节开幕式中有一个奇怪的魔术秀。最有经验的魔术师会找一个 n × n n×n n×n的矩阵(n为偶数)。足球节没有这个魔术秀绝对不会开始。这个矩阵应该包含0~n-1的正整数,且包含以下三条规则:
1、主对角线上的数应该都是0
2、且整个矩阵应该都是对称的
3、每行每列上的数都是不同的。
魔术师很不喜欢一遍又一遍的接矩阵(魔术师真懒),于是就请你写一个程序来帮助他们解决矩阵问题。
输入输出格式
输入格式
只有一行,包含一个偶整数 2 < = n < = 1000 ) (2<=n<=1000) 2<=n<=1000)
输出格式
n行n列的矩阵。数与数之间要空格。如果有多个答案,输出任意一个即可
神奇的构造。
首先应该是一个基本的构造方法来实现题目中的要求三:每行每列上的数都是不同的。

over(i,0,n-1)over(j,0,n-1)
    mp[i][j]=(i+j)%n+1;

应该是需要背下来。
实现出来:N=6

12345
23451
34512
45123
51234

这样左边和上边就已经是对称的了。
接下来实现要求一二。
直接把主对角线上的数全部转移到最右列和最下列,这样直接就是关于对角线对称,然后再把主对角线上全部赋值为0即可,然后直接输出就行了。

023451
204513
340125
451032
512304
135240
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define ls (p<<1)
#define rs (p<<1|1)
#define mid (l+r)/2
#define over(i,s,t) for(int i=s;i<=t;++i)
#define lver(i,t,s) for(int i=t;i>=s;--i)
using namespace std;
typedef long long ll;
const ll N=1e3+7;
const ll mod=2147483647;
const double EPS=1e-6;
ll mp[N][N],n,m;
int main()
{
    scanf("%lld",&n);n--;
    over(i,0,n-1)over(j,0,n-1)
    mp[i][j]=(i+j)%n+1;
    over(i,0,n-1)
    mp[i][n]=mp[n][i]=mp[i][i],mp[i][i]=0;
    over(i,0,n){
        printf("%lld",mp[i][0]);
        over(j,1,n)
        printf(" %lld",mp[i][j]);puts("");
    }
    return 0;
}
#疯狂压行

有任何疑问欢迎评论哦虽然我真的很菜

全部评论

相关推荐

兄弟们你们进大厂靠的是什么项目啊
DOTPHTP:课设改。其实项目什么的如果不是实习里面的生产项目的话,建议✍️那种自己想要做的。突出个人自驱力,而不是为了找工作不得不随波逐流这种
点赞 评论 收藏
分享
叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务