Codeforces Round #540 (Div. 3) C. Palindromic Matrix (大模拟)

题意:给你\(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 (大模拟)的更多相关文章
- Codeforces Round #540 (Div. 3) C. Palindromic Matrix 【暴力】
任意门:http://codeforces.com/contest/1118/problem/C C. Palindromic Matrix time limit per test 2 seconds ...
- Codeforces Round #540 (Div. 3)--1118C - Palindromic Matrix
https://codeforces.com/contest/1118/problem/C 在查找元素的时候,必须按4,2,1的顺序进行.因为,如果先找1,可能就把原来的4拆散了,然后再找4,就找不到 ...
- Codeforces Round #540 (Div. 3) 部分题解
Codeforces Round #540 (Div. 3) 题目链接:https://codeforces.com/contest/1118 题目太多啦,解释题意都花很多时间...还有事情要做,就选 ...
- 二分查找/暴力 Codeforces Round #166 (Div. 2) B. Prime Matrix
题目传送门 /* 二分查找/暴力:先埃氏筛选预处理,然后暴力对于每一行每一列的不是素数的二分查找最近的素数,更新最小值 */ #include <cstdio> #include < ...
- Codeforces Round #367 (Div. 2) B. Interesting drink (模拟)
Interesting drink 题目链接: http://codeforces.com/contest/706/problem/B Description Vasiliy likes to res ...
- 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> ...
- Codeforces Round #531 (Div. 3) F. Elongated Matrix(状压DP)
F. Elongated Matrix 题目链接:https://codeforces.com/contest/1102/problem/F 题意: 给出一个n*m的矩阵,现在可以随意交换任意的两行, ...
- 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 ...
- Codeforces Round #540 (Div. 3)--1118D2 - Coffee and Coursework (Hard Version)
https://codeforces.com/contest/1118/problem/D2 和easy version的主要区别是,数据增加了. easy version采用的是线性查找,效率低 在 ...
随机推荐
- 映泰主板H100系列安装win7的各种坑
自100系列主板发布以来,windows7好像就被遗弃一样,原因就在于安装win7的时候,会出现USB设备无法使用导致无法安装的问题.主要在于Win7系统没有整合USB的XHCI驱动,而100系列芯片 ...
- 一文告诉你Java日期时间API到底有多烂
前言 你好,我是A哥(YourBatman). 好看的代码,千篇一律!难看的代码,卧槽卧槽~其实没有什么代码是"史上最烂"的,要有也只有"史上更烂". 日期是商 ...
- 给定HDFS中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息。
1 import java.text.SimpleDateFormat; 2 import org.apache.hadoop.fs.*; 3 4 public class E_RecursiveRe ...
- python_3 装饰器参数之谜
装饰器参数之谜 之前已经初步了解过装饰器了,知道了装饰器可以"偷梁换柱",在不改变函数的调用方式和函数内容的时候,而把函数的功能偷偷地修改. 那么问题来了,如果被修改的函数中有参数 ...
- (转载)微软数据挖掘算法:Microsoft 目录篇
本系列文章主要是涉及内容为微软商业智能(BI)中一系列数据挖掘算法的总结,其中涵盖各个算法的特点.应用场景.准确性验证以及结果预测操作等,所采用的案例数据库为微软的官方数据仓库案例(Adventure ...
- Springboot中PropertySource注解的使用
https://blog.csdn.net/qq_30739519/article/list/3 注解 https://blog.csdn.net/qq_30739519/article/detail ...
- DDD领域驱动设计:仓储
1 前置阅读 在阅读本文章之前,你可以先阅读: 什么是DDD DDD的实体.值对象.聚合根的基类和接口:设计与实现 2 什么是仓储? 仓储封装了基础设施来提供查询和持久化聚合操作. 它们集中提供常见的 ...
- 系列trick - bitmask
目录 系列trick - bitmask 拆位 位运算优化(点少的)图操作 位筛 系列trick - bitmask 拆位 主体思想:位之间不影响,把每一位拆开来考虑贡献,转化成非常容易考虑的 0/1 ...
- LOJ10069 TREE
题目描述 原题来自:2012 年国家集训队互测 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有 need 条白色边的生成树.题目保证有解. 输入格式 第一行 V,E,need 分 ...
- LOJ10104Blockade
POI 2008 Byteotia 城市有 n 个城镇,m 条双向道路.每条道路连接两个不同的城镇,没有重复的道路,所有城镇连通.输出 n 个数,代表如果把第i 个点去掉,将有多少对点不能互通. 输 ...