Submission #1156572

#TimeUsernameProblemLanguageResultExecution timeMemory
1156572MuhammadSaramRed-blue table (IZhO19_stones)C++20
38 / 100
15 ms1860 KiB
#include <bits/stdc++.h>

using namespace std;

#define int long long

vector<string> sol(int n,int m)
{
	vector<string> v;
	for (int i=0;i<n/2;i++)
	{
		string s(m/2+1,'+'),s1(m/2,'-');
		s+=s1;
		v.push_back(s);
	}
	string wh(m,'-');
	v.push_back(wh);
	for (int i=0;i<n/2;i++)
	{
		string s(m/2+1,'+'),s1(m/2,'-');
		s1+=s;
		v.push_back(s1);
	}
	return v;
}

bool check(int n,int m)
{
	if (n%2)
	{
		int cnt1[m]={};
		string ans[n];
		for (int i=0;i<n;i++)
		{
			if (i<n-2)
			{
				string s(m,'+');ans[i]=s;
			}
			else
			{
				string s(m,'-');ans[i]=s;
			}

		}
		for (int i=0;i<m;i++)
			cnt1[i]-=2,cnt1[i]+=n-2;
		int x=m/2-1;
		for (int i=0;i<n-2;i++)
		{
			for (int j=i*x;j<i*x+x;j++)
				cnt1[j%m]-=2,ans[i][j%m]='-';
		}
		for (int i=0;i<m;i++)
			if (cnt1[i]>=0)
				return 0;
		cout<<n+m-2<<endl;
		for (int i=0;i<n;i++)
			cout<<ans[i]<<endl;
		return 1;
	}
	else if(m%2)
	{
		int cnt1[n]={};
		string ans[n];
		for (int i=0;i<n;i++)
		{
			string s(m,'-');
			s[m-2]=s[m-1]='+';
			ans[i]=s;
		}
		for (int i=0;i<n;i++)
			cnt1[i]-=2,cnt1[i]+=m-2;
		int x=n/2-1;
		for (int i=0;i<m-2;i++)
		{
			for (int j=i*x;j<i*x+x;j++)
				cnt1[j%n]-=2,ans[j%n][i]='+';
		}
		for (int i=0;i<n;i++)
			if (cnt1[i]>=0)
				return 0;
		cout<<n+m-2<<endl;
		for (int i=0;i<n;i++)
			cout<<ans[i]<<endl;
		return 1;
	}
	return 0;
}

bool check1(int n,int m)
{
	if (n<=m)
	{
		int cnt1[m]={};
		string ans[n];
		for (int i=0;i<n;i++)
		{
			if (i<n-3)
			{
				string s(m,'+');ans[i]=s;
			}
			else
			{
				string s(m,'-');ans[i]=s;
			}

		}
		for (int i=0;i<m;i++)
			cnt1[i]-=3,cnt1[i]+=n-3;
		int x=m/2-1;
		for (int i=0;i<n-2;i++)
		{
			for (int j=i*x;j<i*x+x;j++)
				cnt1[j%m]-=2,ans[i][j%m]='-';
		}
		for (int i=0;i<m;i++)
			if (cnt1[i]>=0)
				return 0;
		cout<<n+m-3<<endl;
		for (int i=0;i<n;i++)
			cout<<ans[i]<<endl;
		return 1;
	}
	else
	{
		int cnt1[n]={};
		string ans[n];
		for (int i=0;i<n;i++)
		{
			string s(m,'-');
			s[m-3]=s[m-2]=s[m-1]='+';
			ans[i]=s;
		}
		for (int i=0;i<n;i++)
			cnt1[i]-=2,cnt1[i]+=m-2;
		int x=n/2-1;
		for (int i=0;i<m-2;i++)
		{
			for (int j=i*x;j<i*x+x;j++)
				cnt1[j%n]-=2,ans[j%n][i]='+';
		}
		for (int i=0;i<n;i++)
			if (cnt1[i]>=0)
				return 0;
		cout<<n+m-3<<endl;
		for (int i=0;i<n;i++)
			cout<<ans[i]<<endl;
		return 1;
	}
}

signed main()
{
	int t;
	cin>>t;
	while (t--)
	{
		int n,m;
		cin>>n>>m;
		if (min(n,m)<=2)
		{
			cout<<max(n,m)<<endl;
			char c='+';
			if (min(n,m)==n)
				c='-';
			for (int i=0;i<n;i++)
			{
				string s(m,c);
				cout<<s<<endl;
			}
		}
		else if (n%2 && m%2)
		{
			cout<<n+m-2<<endl;
			vector<string> v=sol(n,m);
			for (auto i:v)
				cout<<i<<endl;
		}
		else if(check(n,m))
			continue;
		else if (n%2)
		{
			cout<<n+m-3<<endl;
			vector<string> v=sol(n,m-1);
			for (auto i:v)
				cout<<i<<'+'<<endl;
		}
		else if(m%2)
		{
			cout<<n+m-3<<endl;
			vector<string> v=sol(n-1,m);
			for (auto i:v)
				cout<<i<<endl;
			string s(m,'-');
			cout<<s<<endl;
		}
		else if(check1(n,m))
			continue;
		else
		{
			cout<<n+m-4<<endl;
			vector<string> v=sol(n-1,m-1);
			for (auto i:v)
				cout<<i<<'+'<<endl;
			string s(m,'-');
			cout<<s<<endl;
		}
	}
	
	return 0;
}
#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...