求4,5,9测试点,自己测试感觉都对,或者大佬教教蒟蒻
查看原帖
求4,5,9测试点,自己测试感觉都对,或者大佬教教蒟蒻
211897
weconyed楼主2022/8/19 23:52
#include<bits/stdc++.h>
#define debug cout<<"debug"<<endl
using namespace std;
int m,n;
char ans[1000][1600];
map<int,bool> a;
int f[11];

void print(int x,int y,int iter){
	f[iter]++;
	if(a[f[iter]*10+iter]){
		if((f[iter]&1)==1){
		
		while(ans[x][y]!='o'){
			ans[x][y]=' ';
			x--;
			y++;
		}
		return;
	}else{
		while(ans[x][y]!='o'){
			ans[x][y]=' ';
			x--;
			y--;
		}
		return;
	}
	}
	ans[x][y]='o';
	if(iter==m){
		if((f[iter]&1)==1) ans[x][y+1]=ans[x][y+2]=ans[x][y+3]=' ';
		else ans[x][y+1]=' ';
	}else{
		int t=(iter<m-1?(3*(1<<(m-2-iter))-1):1);
		for(int i=1;i<=t;i++){
			ans[x+1][y-i]='/';
		    ans[x+1][y+i]='\\';
		    x++;
		}
		x++;
		t++;
		print(x,y-t,iter+1);
		print(x,y+t,iter+1);
	}
}

int main(){
//	freopen("myans.txt","w",stdout);
	cin>>m>>n;
	for(int i=1;i<=3*(1<<(m-2));i++)
    	for(int j=1;j<=3*(1<<m-1)-1;j++)
    	    ans[i][j]=' ';
	memset(f,0,sizeof(f));
	int x,y;
	for(int i=1;i<=n;i++){
		cin>>x>>y;
		a[y*10+x]=1;
	}
    print(1,3*(1<<m-2),1);
	
for(int i=1;i<=3*(1<<(m-2));i++){
   	for(int j=1;j<=3*(1<<m-1)-1;j++)
    	    cout<<ans[i][j];
    	cout<<endl;
	}
	return 0;
} 
2022/8/19 23:52
加载中...