• 题意:给你\(n\)个数,判断是否能构成一个\(n\)X\(n\)的回文矩阵,若可以,输出\(YES\)和矩阵,否则输出\(NO\).

  • 题解:如果这个矩阵的行/列元素是偶数的话,很好办,所有出现的数一定是\(4\)的倍数,我们直接判断然后模拟输出一下即可.如果是奇数,就要麻烦一点,我们首先用桶存一下所有元素的出现次数,然后直接模拟,首先奇数矩阵的左上右上左下右下一定是对称的,所以我们可以先看左上角的一个小块,模拟一下,每次可以确定\(4\)个位置.之后就是两行中心线了,除了中心,每个位置的元素的对应位置只有一个,所以判断\(2\)即可,再最后是否剩下一个元素给中心即可.

  • 代码:

    int n;
    int a[N];
    map<int,int> mp;
    int g[200][200];
    bool st[200][200];
    int one; int main() {
    //ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    n=read();
    for(int i=1;i<=n*n;++i){
    a[i]=read();
    mp[a[i]]++;
    } if(n%2==0){
    bool flag=true;
    for(auto w:mp){
    if(w.se%4!=0){
    flag=false;
    break;
    }
    }
    if(!flag) cout<<"NO"<<endl;
    else{
    cout<<"YES"<<endl;
    for(auto &w:mp){
    for(int i=1;i<=n;++i){
    bool flag=true;
    for(int j=1;j<=n;++j){
    if(!st[i][j]){
    g[i][j]=w.fi,st[i][j]=true;
    g[i][n+1-j]=w.fi,st[i][n+1-j]=true;
    g[n+1-i][j]=w.fi,st[n+1-j][j]=true;
    g[n+1-i][n+1-j]=w.fi,st[n+1-i][n+1-j]=true;
    w.se-=4;
    if(w.se==0){
    flag=false;
    break;
    }
    }
    }
    if(!flag) break;
    }
    }
    for(int i=1;i<=n;++i){
    for(int j=1;j<=n;++j){
    cout<<g[i][j]<<" ";
    }
    cout<<'\n';
    }
    }
    }
    else{
    int cnt=0;
    for(int i=1;i<=n/2;++i){
    for(int j=1;j<=n/2;++j){
    for(auto &w:mp){
    if(w.se>=4){
    g[i][j]=w.fi;
    g[i][n+1-j]=w.fi;
    g[n+1-i][j]=w.fi;
    g[n+1-i][n+1-j]=w.fi;
    w.se-=4;
    cnt++;
    break;
    }
    }
    }
    }
    if(cnt!=(n/2)*(n/2)){
    cout<<"NO"<<endl;
    return 0;
    }
    int row=(n/2)+1;
    cnt=0;
    for(int j=1;j<=n/2;++j){
    for(auto &w:mp){
    if(w.se>=2){
    g[row][j]=w.fi;
    g[row][n+1-j]=w.fi;
    cnt++;
    w.se-=2;
    break;
    }
    }
    }
    if(cnt!=n/2){
    cout<<"NO"<<endl;
    return 0;
    }
    int col=row;
    cnt=0;
    for(int i=1;i<=n/2;++i){
    for(auto &w:mp){
    if(w.se>=2){
    g[i][col]=w.fi;
    g[n+1-i][col]=w.fi;
    cnt++;
    w.se-=2;
    break;
    }
    }
    }
    if(cnt!=(n/2)){
    cout<<"NO"<<endl;
    return 0;
    }
    for(auto &w:mp){
    if(w.se==1){
    g[row][col]=w.fi;
    cout<<"YES"<<endl;
    for(int i=1;i<=n;++i){
    for(int j=1;j<=n;++j){
    cout<<g[i][j]<<" ";
    }
    cout<<'\n';
    }
    return 0;
    }
    }
    cout<<"NO"<<endl;
    } return 0;
    }

Codeforces Round #540 (Div. 3) C. Palindromic Matrix (大模拟)的更多相关文章

  1. Codeforces Round #540 (Div. 3) C. Palindromic Matrix 【暴力】

    任意门:http://codeforces.com/contest/1118/problem/C C. Palindromic Matrix time limit per test 2 seconds ...

  2. Codeforces Round #540 (Div. 3)--1118C - Palindromic Matrix

    https://codeforces.com/contest/1118/problem/C 在查找元素的时候,必须按4,2,1的顺序进行.因为,如果先找1,可能就把原来的4拆散了,然后再找4,就找不到 ...

  3. Codeforces Round #540 (Div. 3) 部分题解

    Codeforces Round #540 (Div. 3) 题目链接:https://codeforces.com/contest/1118 题目太多啦,解释题意都花很多时间...还有事情要做,就选 ...

  4. 二分查找/暴力 Codeforces Round #166 (Div. 2) B. Prime Matrix

    题目传送门 /* 二分查找/暴力:先埃氏筛选预处理,然后暴力对于每一行每一列的不是素数的二分查找最近的素数,更新最小值 */ #include <cstdio> #include < ...

  5. Codeforces Round #367 (Div. 2) B. Interesting drink (模拟)

    Interesting drink 题目链接: http://codeforces.com/contest/706/problem/B Description Vasiliy likes to res ...

  6. Codeforces Round #540 (Div. 3) A,B,C,D2,E,F1

    A. Water Buying 链接:http://codeforces.com/contest/1118/problem/A 实现代码: #include<bits/stdc++.h> ...

  7. Codeforces Round #531 (Div. 3) F. Elongated Matrix(状压DP)

    F. Elongated Matrix 题目链接:https://codeforces.com/contest/1102/problem/F 题意: 给出一个n*m的矩阵,现在可以随意交换任意的两行, ...

  8. Codeforces Round #540 (Div. 3)--1118F1 - Tree Cutting (Easy Version)

    https://codeforces.com/contest/1118/problem/F1 #include<bits/stdc++.h> using namespace std; in ...

  9. Codeforces Round #540 (Div. 3)--1118D2 - Coffee and Coursework (Hard Version)

    https://codeforces.com/contest/1118/problem/D2 和easy version的主要区别是,数据增加了. easy version采用的是线性查找,效率低 在 ...

随机推荐

  1. python中re模块的使用(正则表达式)

    一.什么是正则表达式? 正则表达式,又称规则表达式,通常被用来检索.替换那些符合某个模式(规则)的文本. 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合, ...

  2. 【Oracle】用sqlplus登录的各种方式

    1.本地登录 sqlplus / as sysdba 2.账号密码登录 sqlplus user/passwd 3.选择实例登录 sqlplus user/passwd@实例名   例如 sqlplu ...

  3. 【RAC】运行root.sh的时候报错root.sh Oracle CRS stack is already configured and will be running under init(1M)

    环境:oracle10g 系统:CentOS6.4 开始的时候,在节点1上运行root.sh发现出现90s 的时候hang住了,结束掉,结局完事后,再次运行root.sh报错 WARNING: dir ...

  4. 使用 gRPCurl 调试.NET 5的gPRC服务

    介绍 你用过 Curl 吗?这个工具允许你通过 http 来发送数据,现在有一个适用于gGRPC的工具,gRPCurl,在本文中,我将介绍如何下载安装这个工具,然后通过这个工具调试我们.NET 5上面 ...

  5. 基于kubernetes实现coredns的及验证

    CoreDNS:  k8s内部的DNS ,用于对pod对service做记录的,好让其他的pod做访问 这里不用做过多的阐述 官方kube-dns现在已经没有在维护了,从Kubernetes 1.11 ...

  6. Windows系统使用运行框运行程序

    配置步骤 1. 在非系统盘创建一个新文件夹,自定义名称.将需要使用运行框启动的程序或文件放入文件夹,并将其更改为自己容易记忆的名称 2. 创建环境变量 右击 "此电脑" → &qu ...

  7. DB2版本升级(V9.7升级到V11.1)

    1.V11.1版本升级路线 DB2 11.1 可以将现有的 Db2 V9.7.Db2 V10.1 或 Db2 V10.5 实例和数据库直接升级到 Db2 V11.1.如果 Db2 服务器正在 Db2 ...

  8. Java中的基本数据类型与引用数据类型

    一.基本数据类型 byte.short.int.long(整数类型) float.double(浮点数类型) char(字符型) boolean(布尔类型 ) Java数据大多数存放在堆栈中. 栈区: ...

  9. Jmeter-插件扩展及性能监控插件的安装

    需要对http服务进行大数据量的传值测试:看看产品中的http服务,能支持传多少字符:目标值是希望能到10w+: 上次测试中,服务器总是内存满导致服务不响应,因此想增加对服务端的性能监控:查阅了smi ...

  10. 解决JavaScript中构造函数浪费内存的问题!

    解决JavaScript中构造函数浪费内存的问题! 把构造函数中的公共的方法放到构造函数的原型对象上! // 构造函数的问题! function Gouzaohanshu(name, age, gen ...