제출 #1156453

#제출 시각아이디문제언어결과실행 시간메모리
1156453Muhammad_AneeqRed-blue table (IZhO19_stones)C++20
27 / 100
410 ms2052 KiB
/* بسم الله الرحمن الرحيم Author: (:Muhammad Aneeq:) */ #include <iostream> #include <queue> #include <vector> #include <algorithm> #include <set> #warning check the output using namespace std; int const N=1010; char ans[N][N]={}; int n,m; int check() { int a=0; for (int i=0;i<m;i++) { int z=0; for (int j=0;j<n;j++) z+=(ans[j][i]=='-'); if (z>n-z) a++; } for (int i=0;i<n;i++) { int z=0; for (int j=0;j<m;j++) z+=(ans[i][j]=='+'); a+=(z>m-z); } return a; } void print() { cout<<check()<<endl; for (int i=0;i<n;i++) { for (int j=0;j<m;j++) cout<<ans[i][j]; cout<<endl; } } inline void solve() { cin>>n>>m; for (int i=0;i<n;i++) for (int j=0;j<m;j++) ans[i][j]=' '; if (m>n) { priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>pq,qp; for (int i=0;i<n;i++) pq.push({0,i}); set<int>vl[n]; for (int i=0;i<m;i++) { vector<pair<int,int>>ind; for (int j=0;j<n/2+1;j++) { if (qp.size()) { ind.push_back(qp.top()); qp.pop(); continue; } ind.push_back(pq.top()); pq.pop(); } for (auto [k,j]:ind) { vl[j].insert(i); ans[j][i]='-'; if (k+1>=(m+1)/2) qp.push({k+1,j}); else pq.push({k+1,j}); } } vector<int>vs; while (qp.size()) { vs.push_back(qp.top().second); qp.pop(); } reverse(begin(vs),end(vs)); for (int i=0;i<vs.size();i++) { for (int j=vs.size()-1;j>i;j--) { set<int>g; for (auto k:vl[vs[j]]) { if (vl[vs[i]].find(k)==vl[vs[i]].end()) { ans[vs[j]][k]=' '; ans[vs[i]][k]='-'; vl[vs[i]].insert(k); } else g.insert(k); } vl[vs[j]]=g; } } for (int i=0;i<n;i++) for (int j=0;j<m;j++) if (ans[i][j]!='-') ans[i][j]='+'; char pr[n][m]; for (int i=0;i<n;i++) for (int j=0;j<m;j++) pr[i][j]=ans[i][j]; vector<pair<int,int>>v; v.push_back({check(),m}); for (int j=m-1;j>=0;j--) { for(int i=0;i<n;i++) ans[i][j]='+'; v.push_back({check(),j}); } sort(begin(v),end(v)); for (int i=0;i<n;i++) for (int j=0;j<m;j++) ans[i][j]=pr[i][j]; for (int j=v.back().first;j<m;j++) { for (int i=0;i<n;i++) ans[i][j]='+'; } print(); } else { priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>pq,qp; for (int i=0;i<m;i++) pq.push({0,i}); set<int>vl[m]; for (int i=0;i<n;i++) { vector<pair<int,int>>ind; for (int j=0;j<m/2+1;j++) { if (qp.size()) { ind.push_back(qp.top()); qp.pop(); continue; } ind.push_back(pq.top()); pq.pop(); } for (auto [k,j]:ind) { vl[j].insert(i); ans[i][j]='+'; if (k+1>=(n+1)/2) qp.push({k+1,j}); else pq.push({k+1,j}); } } vector<int>vs; while (qp.size()) { vs.push_back(qp.top().second); qp.pop(); } reverse(begin(vs),end(vs)); for (int i=0;i<vs.size();i++) { for (int j=vs.size()-1;j>i;j--) { set<int>g; for (auto k:vl[vs[j]]) { if (vl[vs[i]].find(k)==vl[vs[i]].end()) { ans[k][vs[j]]=' '; ans[k][vs[i]]='+'; vl[vs[i]].insert(k); } else g.insert(k); } vl[vs[j]]=g; } } for (int i=0;i<n;i++) for (int j=0;j<m;j++) if (ans[i][j]!='+') ans[i][j]='-'; char pr[n][m]={}; for (int i=0;i<n;i++) for (int j=0;j<m;j++) pr[i][j]=ans[i][j]; vector<pair<int,int>>v; v.push_back({check(),n}); for (int j=n-1;j>=0;j--) { for(int i=0;i<m;i++) ans[j][i]='-'; v.push_back({check(),j}); } sort(begin(v),end(v)); for (int i=0;i<n;i++) for (int j=0;j<m;j++) ans[i][j]=pr[i][j]; for (int j=v.back().first;j<n;j++) { for (int i=0;i<m;i++) ans[j][i]='-'; } print(); } } int main() { ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); int t=1; cin>>t; for (int i=1;i<=t;i++) { solve(); } }

컴파일 시 표준 에러 (stderr) 메시지

stones.cpp:12:2: warning: #warning check the output [-Wcpp]
   12 | #warning check the output
      |  ^~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...