답안 #236509

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
236509 2020-06-02T12:25:54 Z kshitij_sodani Red-blue table (IZhO19_stones) C++17
58 / 100
2000 ms 3192 KB
#include <bits/stdc++.h>
using namespace std;
typedef int64_t llo;
#define mp make_pair
#define pb push_back
#define a first
#define b second
int n,m,t;
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin>>t;
	while(t--){
		cin>>n>>m;
		if(n==1){
			cout<<m<<endl;
			for(int j=0;j<m;j++){
				cout<<"-";
			}
			cout<<endl;
		}
		else if(m==1){
			cout<<n<<endl;
			for(int j=0;j<n;j++){
				cout<<"+"<<endl;
			}
			cout<<endl;
		}
		else if(n==2){
			cout<<m<<endl;
			for(int i=0;i<m;i++){
				cout<<"-";
			}
			cout<<endl;
			for(int i=0;i<m;i++){
				cout<<"-";
			}
			cout<<endl;
		}
		else if(m==2){
			cout<<n<<endl;
			for(int i=0;i<n;i++){
				cout<<"++"<<endl;
			}
		}
		else if(n==3){
			cout<<(m+1)<<endl;
			for(int i=0;i<m;i++){
				cout<<"-";
			}
			cout<<endl;
			for(int i=0;i<m;i++){
				cout<<"+";
			}
			cout<<endl;
			for(int i=0;i<m;i++){
				cout<<"-";
			}
			cout<<endl;
		}
		else if(m==3){
			cout<<(n+1)<<endl;
			for(int i=0;i<n;i++){
				cout<<"+-+"<<endl;
			}
		}
		else if(n==4){
			cout<<m+1<<endl;
			for(int j=0;j<3;j++){
				for(int i=0;i<m;i++){
					cout<<"-";
				}
				cout<<endl;
			}
			for(int i=0;i<m;i++){
					cout<<"+";
				}
				cout<<endl;

		}
		else if(m==4){
			cout<<n+1<<endl;
			for(int i=0;i<n;i++){
				cout<<"+++-"<<endl;
			}
		}
		/*else if(m%2==1 and n%2==1){
			if(m+3+(n-5)/2>n+3+(m-5)/2){
				cout<<(m+3+(n-5)/2)<<endl;
				int it[n][m];
				for(int i=0;i<n;i++){
					for(int j=0;j<m;j++){
						it[i][j]=0;
					}
				}
				for(int i=0;i<(m+2)/2;i++){
					it[0][i]=1;
				}
				for(int i=m-(m+2)/2;i<m;i++){
					it[1][i]=1;
				}
				for(int j=0;j<m;j++){
					if(it[0][j]!=1 or it[1][j]!=1){
						it[2][j]=1;
					}
				}
				for(int i=5;i<n;i+=2){
					for(int j=0;j<m;j++){
						it[i][j]=1;
					}
				}
				for(int i=0;i<n;i++){
					for(int j=0;j<m;j++){
						if(it[i][j]==1){
							cout<<"+";
						}
						else{
							cout<<"-";
						}
					}
					cout<<endl;
				}
			}
			else{
				cout<<(n+3+(m-5)/2)<<endl;
				int it[n][m];
				for(int i=0;i<n;i++){
					for(int j=0;j<m;j++){
						it[i][j]=0;
					}
				}
				for(int i=0;i<(n+2)/2;i++){
					it[i][0]=1;
				}
				for(int i=n-(n+2)/2;i<n;i++){
					it[i][1]=1;
				}
				for(int j=0;j<n;j++){
					if(it[j][0]!=1 or it[j][1]!=1){
						it[j][2]=1;
					}
				}
				for(int j=5;j<m;j+=2){
					for(int i=0;i<n;i++){
						it[i][j]=1;
			//			cout<<i<<","<<j<<endl;
					}
				}
				for(int i=0;i<n;i++){
					for(int j=0;j<m;j++){
						if(it[i][j]==1){
							cout<<"-";
						}
						else{
							cout<<"+";
						}
					}
					cout<<endl;
				}
			}
		}*/
		else if(n==5){
			cout<<(m+3+(n-5)/2)<<endl;
			int it[n][m];
			for(int i=0;i<n;i++){
				for(int j=0;j<m;j++){
					it[i][j]=0;
				}
			}
			for(int i=0;i<(m+2)/2;i++){
				it[0][i]=1;
			}
			for(int i=m-(m+2)/2;i<m;i++){
				it[1][i]=1;
			}
			for(int j=0;j<m;j++){
				if(it[0][j]!=1 or it[1][j]!=1){
					it[2][j]=1;
				}
			}
			for(int i=5;i<n;i+=2){
				for(int j=0;j<m;j++){
					it[i][j]=1;
				}
			}
			for(int i=0;i<n;i++){
				for(int j=0;j<m;j++){
					if(it[i][j]==1){
						cout<<"+";
					}
					else{
						cout<<"-";
					}
				}
				cout<<endl;
			}
		}
		else if(m==5){

			cout<<(n+3)<<endl;
			int it[n][m];
			for(int i=0;i<n;i++){
				for(int j=0;j<m;j++){
					it[i][j]=0;
				}
			}
			for(int i=0;i<(n+2)/2;i++){
				it[i][0]=1;
			}
			for(int i=n-(n+2)/2;i<n;i++){
				it[i][1]=1;
			}
			for(int j=0;j<n;j++){
				if(it[j][0]!=1 or it[j][1]!=1){
					it[j][2]=1;
				}
			}
			for(int i=0;i<n;i++){
				for(int j=0;j<m;j++){
					if(it[i][j]==1){
						cout<<"-";
					}
					else{
						cout<<"+";
					}
				}
				cout<<endl;
			}
		}
		else if(m==n){
			if(m==6){
				cout<<9<<endl;
				cout<<"++++--"<<endl;
				cout<<"--++++"<<endl;
				cout<<"++--++"<<endl;
				cout<<"------"<<endl;
				cout<<"------"<<endl;
				cout<<"------"<<endl;
				continue;
			}
			int it[n][m];
			for(int i=0;i<n;i++){
				for(int j=0;j<m;j++){
					it[i][j]=0;
				}
			}
			if(m%2==1 and n%2==1){
				cout<<(4*(m/2))<<endl;
				for(int i=0;i<(m+1)/2;i++){
					for(int j=0;j<(n)/2;j++){
						it[j][i]=1;
					}
				}
				for(int i=0;i<(m+1)/2;i++){
					for(int j=0;j<(n)/2;j++){
						it[n-j-1][m-i-1]=1;
					}
				}
				for(int i=0;i<n;i++){
					for(int j=0;j<m;j++){
						if(it[i][j]==1){
							cout<<"+";
						}
						else{
							cout<<"-";
						}
					}
					cout<<endl;
				}
			}
			else{
				cout<<(4*(n/2-1))<<endl;
				for(int i=0;i<(m+2)/2;i++){
					for(int j=0;j<(n-1)/2;j++){
						it[j][i]=1;
					}
				}
				for(int i=0;i<(m+2)/2;i++){
					for(int j=0;j<(n-1)/2;j++){
						it[n-j-1][m-i-1]=1;
					}
				}
				for(int i=0;i<n;i++){
					for(int j=0;j<m;j++){
						if(it[i][j]==1){
							cout<<"+";
						}
						else{
							cout<<"-";
						}
					}
					cout<<endl;
				}

			}
		}
		else{
			int k=(n+2)/2;
			int l=(m+2)/2;
			int ma=-1;
			pair<int,int> aa={-1,-1};
			int bb=m;
			for(int i=0;i<=n;i++){
				while(i*l+k*bb>(n*m)){
					bb-=1;
				}
				if(i+bb>ma){
					ma=i+bb;
					aa={i,bb};
				}
			}
			if(aa.b<0){
				while(true){
					continue;
				}
			}
			int it[n][m];
			for(int i=0;i<n;i++){
				for(int j=0;j<m;j++){
					it[i][j]=0;
				}
			}
			int le=m-aa.b;
			/*if(ma==34){
				return 0;
			}*/
			//cout<<ma<<endl;
			deque<int> freq[1001];
			int ind=0;
			for(int i=le;i<m;i++){
				freq[0].pb(i);
			}
			//(m-le)
			//cout<<aa.a<<","<<aa.b<<endl;
			int vis[1001];
			for(int i=0;i<1001;i++){
				vis[i]=0;
			}
			int cot[1001];
			for(int i=0;i<1001;i++){
				cot[i]=0;
			}
			for(int i=0;i<aa.a;i++){
				vector<int> kk;
				for(int j=0;j<l;j++){
					if(j<le){
						it[i][j]=1;
						continue;
					}
					if(freq[ind].size()==0){
						ind+=1;
					}
					if(ind>=(m-1)/2){
						while(true){
							continue;
						}
					}
					it[i][freq[ind].back()]=1;
				//	cout<<i<<":"<<freq[ind].back()<<endl;
					int xx=freq[ind].back();
					kk.pb(xx);
					if(vis[xx]==1){
						while(true){
							continue;
						}
					}
					vis[xx]=1;
					cot[xx]+=1;
					freq[ind+1].push_front(xx);
					freq[ind].pop_back();
				}
				for(auto j:kk){
					vis[j]=0;
				}
			}
			int coo=0;
			for(int i=0;i<m;i++){
				int co=0;
				for(int j=0;j<n;j++){
					if(it[j][i]==0){
						co+=1;
					}
				}
				if(co>=k){
					coo+=1;

				}
			
			}
			if(le!=m-(aa.b)){
				while(true){
					continue;
				}
			}
	//		cout<<coo<<","<<aa.b<<endl;
			/*if(coo!=aa.b){
				
			}*/
			cout<<coo+aa.a<<endl;
			for(int i=0;i<n;i++){
				for(int j=0;j<m;j++){
					if(it[i][j]==1){
						cout<<"+";
					}
					else{
						cout<<"-";
					}
				}
				cout<<endl;
			}


		}

		/*int it[n][m];
			if(n>m){
				int l=0;
				for(int i=0;i<n;i++){
					for(int j=l;j<l+(m+2)/2;j++){
						it[i][j%m]=1;
					}
					l=l+(m+2)/2;
					l%=m;
				}
				for(int i=0;i<n;i++){
					for(int j=0;j<m;j++){
						if(it[i][j]){
							cout<<"+";
						}
						else{
							cout<<"-";
						}
					}
					cout<<endl;
				}
			}
			else{
				for(int i=0;i<n;i++){
					for(int j=0;j<m;j++){
						if(i%2==0){
							cout<<"-";
						}
						else{
							cout<<"+";
						}
					}
					cout<<endl;
				}
			}*/
		
	}


	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 13 ms 384 KB Output is correct
4 Correct 19 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2084 ms 1024 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 49 ms 1400 KB Output is correct
2 Correct 33 ms 3192 KB Output is correct
3 Correct 27 ms 2432 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 13 ms 384 KB Output is correct
4 Correct 19 ms 384 KB Output is correct
5 Execution timed out 2084 ms 1024 KB Time limit exceeded
6 Halted 0 ms 0 KB -