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采用的是线性查找,效率低 在 ...
随机推荐
- Ubuntu_Gedit配置
Ubuntu_Gedit配置 为了换Ubuntu的时候能够更加方便,不用再用手重新打一遍代码,丢几个Gedit配置-- External Tools gdb compile (F2) #!/bin/s ...
- linux线程数限制与zabbix监控
Linux最大线程数限制及当前线程数查询 最大线程数计算方式: n = total_memory/128k; Linux用户线程数限制而导致的程序异常为 java.lang.OutOfMemoryEr ...
- xtrabackup 备份与恢复
书上摘抄 ---深入浅出mysql 448页 grant reload on *.* to 'backup'@'localhost' identified by '123456'; grant re ...
- python—打开图像文件报错
今天使用python打开一张图像文件的时候报错了 UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illeg ...
- Kubernetes CoreDNS 状态是 CrashLoopBackOff 报错
查看状态的时候,遇见coredns出现crashlookbackoff,首先我们来进行排错,不管是什么原因,查看coredns的详细信息,以及logs [root@k8s-master coredns ...
- 如何使用github搜索需要的开源项目
按照项目名/仓库名搜索(大小写不敏感)in:name xxx按照README搜索(大小写不敏感)in:readme xxx按照description搜索(大小写不敏感)in:description x ...
- 关于BAPI_TRANSACTION_COMMIT一点说明
我们调用bapi做了相关的业务操作后,通常都要在后面调用 BAPI_TRANSACTION_COMMIT来提交所做得更改 然而,有时候,在程序中需要调用多个不同的BAPI实现不同的功能,那么这个时候就 ...
- 5V充12.6V三节锂电池,5V升压12.6V的电路图
三串锂电池的充电电压是三串锂电池的最高电压值,就是12.6V了.5V充12.6V是5V给三串锂电池充电.如笔记本的USB口5V给三串锂电池充电,如5V的适配器或者手机充电器插上数据线给三串锂电池充电电 ...
- Bitter.Core系列四:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 之 示例 查询
一: 单表模型驱动查询 如下示例代码演示: // 根据ID 查询: var studentquery = db.FindQuery<TStudentInfo>().QueryById(12 ...
- How does Go kit compare to Micro?
Go kit - Frequently asked questions https://gokit.io/faq/ How does Go kit compare to Micro? Like Go ...