/*
بسم الله الرحمن الرحيم
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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |