제출 #1156572

#제출 시각아이디문제언어결과실행 시간메모리
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...