1. 程式人生 > >Codeforces Round #540 (Div. 3)--1118C - Palindromic Matrix

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

ces contest time std != 順序 div names space

https://codeforces.com/contest/1118/problem/C

在查找元素的時候,必須按4,2,1的順序進行。因為,如果先找1,可能就把原來的4拆散了,然後再找4,就找不到了

#include<bits/stdc++.h>
using namespace std;
int ans[25][25];
int main(){
    int n;
    cin>>n;
    map<int,int> mp;
    int t;
    for(int i=0;i<n*n;i++){
        cin>>t;
        mp[t]
++; } vector<pair<int,pair<int,int> > > ceil; for(int i=0;i<(n+1)/2;i++) for(int j=0;j<(n+1)/2;j++){ if(i!=n-1-i&&j!=n-1-j) ceil.push_back({4,{i,j}}); else if(i!=n-1-i||j!=n-1-j) ceil.push_back({2
,{i,j}}); else ceil.push_back({1,{i,j}}); } int number[3]={4,2,1}; for(int q=0;q<3;q++){ int w=number[q]; for(int v=0;v<ceil.size();v++){ pair<int,pair<int,int> > c=ceil[v]; int times=c.first;
if(times!=w) continue; int i=c.second.first; int j=c.second.second; map<int,int>::iterator it; for(it=mp.begin();it!=mp.end();it++){ if(it->second>=times){ it->second-=times; ans[i][j] = ans[n - i - 1][j] = ans[i][n - j - 1] = ans[n - i - 1][n - j - 1] = it->first; break; } } if(it==mp.end()){ cout<<"NO"<<endl; return 0; } } } cout<<"YES"<<endl; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cout<<ans[i][j]<<" "; } cout<<endl; } return 0; }

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