93分求调
查看原帖
93分求调
753807
lijiay楼主2024/9/18 09:51
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,m,k;
int t[1000];
int a[2001][2001],b[2001][2001];
int x[1000],y[1000];
bool check() {
	for(int i=1; i<=n; i++)
		for(int j=1; j<=m; j++) {
			if(b[i+1000][j+1000]==0)
				return 0;
		}
	return 1;
}
void f(int x,int y,int t) {
	memset(b,0,sizeof(b));
	b[x+1000][y+1000]=1;
	int s=0,k=1,p=2,xx=x,yy=y;
	if(t==0) {
		while(1) {
			s++;
			while(k<=s) {
				b[xx+1000-1][yy+1000]=p;
				p++;
				k++;
				xx--;
			}
			k=1;
			while(k<=s) {
				b[xx+1000][yy+1000+1]=p;
				p++;
				k++;
				yy++;
			}
			k=1;
			s++;
			while(k<=s) {
				b[xx+1000+1][yy+1000]=p;
				p++;
				k++;
				xx++;
			}
			k=1;
			while(k<=s) {
				b[xx+1000][yy+1000-1]=p;
				p++;
				k++;
				yy--;
			}
			k=1;
			if(check())
				break;
		}
	} else {
		while(1) {
			s++;
			while(k<=s) {
				b[xx+1000-1][yy+1000]=p;
				p++;
				k++;
				xx--;
			}
			k=1;
			while(k<=s) {
				b[xx+1000][yy+1000-1]=p;
				p++;
				k++;
				yy--;
			}
			k=1;
			s++;
			while(k<=s) {
				b[xx+1000+1][yy+1000]=p;
				p++;
				k++;
				xx++;
			}
			k=1;
			while(k<=s) {
				b[xx+1000][yy+1000+1]=p;
				p++;
				k++;
				yy++;
			}
			k=1;
			if(check())
				break;
		}
	}
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=m; j++) {
			a[i+1000][j+1000]=min(a[i+1000][j+1000],b[i+1000][j+1000]);
		}
	}
}
int main() {
	//freopen("Spirale.in","r",stdin);
	//freopen("Spirale.out","w",stdout);
	memset(a,0x3f3f3f3f,sizeof(a));
	cin>>n>>m>>k;
	for(int i=1; i<=k; i++) {
		cin>>x[i]>>y[i]>>t[i];
		a[x[i]+1000][y[i]+1000]=1;
	}
	for(int i=1; i<=k; i++) {
		f(x[i],y[i],t[i]);
	}
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=m; j++) {
			cout<<a[i+1000][j+1000]<<' ';
		}
		cout<<endl;
	}
	return 0;
}
2024/9/18 09:51
加载中...