/*
بسم الله الرحمن الرحيم
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;
bool ch=(m>n);
if (ch)
swap(n,m);
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
ans[i][j]=' ';
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<pair<int,int>>vs;
while (qp.size())
{
vs.push_back(qp.top());
qp.pop();
}
while (1)
{
sort(begin(vs),end(vs));
reverse(begin(vs),end(vs));
while (vs.size()&&vs.back().first<(n+1)/2)
vs.pop_back();
bool w=0;
for (int i=0;i<vs.size();i++)
{
for (int j=vs.size()-1;j>i;j--)
{
set<int>g;
if (vl[vs[j].second].size()<(n+1)/2)
continue;
for (auto k:vl[vs[j].second])
{
if (vl[vs[i].second].find(k)==vl[vs[i].second].end())
{
ans[k][vs[j].second]=' ';
ans[k][vs[i].second]='+';
vl[vs[i].second].insert(k);
}
else
g.insert(k);
}
if (g.size()!=vl[vs[j].second].size())
w=1;
vl[vs[j].second]=g;
}
}
if (w==0)
break;
for (int i=0;i<vs.size();i++)
{
int ind=vs[i].second;
vs[i]={vl[ind].size(),ind};
}
}
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]='-';
}
if (ch)
{
char an[m][n]={};
for (int i=0;i<n;i++)
{
for (int j=0;j<m;j++)
{
an[j][i]=ans[i][j];
if (an[j][i]=='-')
an[j][i]='+';
else
an[j][i]='-';
}
}
cout<<check()<<endl;
for (int i=0;i<m;i++)
{
for (int j=0;j<n;j++)
cout<<an[i][j];
cout<<endl;
}
}
else
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... |