2018_2_11_Creating a Quadtree_四叉树

https://vjudge.net/problem/UVA-11941

m可以为0;


#include<cstring>
#include <iostream>  
#include<algorithm>
#include<string>
#include<sstream>
#include<set>
using namespace std;  
char g[1024][1024];
char node[1024*1024];

set<int> si;
int a[30];

void init(){
	int t=1;
	for(int i=0;i<30;i++){
		si.insert(t*=2);
		a[i]=t*2;
	}
}

int build(int k,int lx,int ly,int rx,int ry){
	if(lx==rx&&ly==ry)
	return node[k]=(1<<g[lx][ly]);
	int mx=(lx+rx)/2,my=(ly+ry)/2;
	int v=0;
	v|=build(k*4,lx,ly,mx,my);
	v|=build(k*4+1,mx+1,ly,rx,my);
	v|=build(k*4+2,lx,my+1,mx,ry);
	v|=build(k*4+3,mx+1,my+1,rx,ry);
	return node[k]=v;
}

void dfs(int u){
	if(node[u]==3){
		if(u>1)putchar('*');
		dfs(u*4);
		dfs(u*4+1);
		dfs(u*4+2);
		dfs(u*4+3);
	}else{
		if(node[u]==1)putchar('0');
		else putchar('1');
	}
}

int main(){
	int z;
	scanf("%d",&z);
	while(getchar()!='\n');
	char line[32767];
	init();
	while(z--){
		gets(line);
		stringstream sin(line);
		string token;
		int n;
		sin>>n;
		if(si.find(n)==si.end()||n<=1){
			puts("Size is invalid");continue;
		}
		memset(g,0,sizeof(g));
		int sx,sy,ex,ey;
		while(sin>>token){
			sscanf(token.c_str(),"(%d,%d)",&sx,&sy);
			if(sin>>token){
				sscanf(token.c_str(),"(%d,%d)",&ex,&ey);
				sx--,sy--,ex--,ey--;
				for(int i=sx;i<=ex;i++)
				for(int j=sy;j<=ey;j++)
				g[i][j]=1;
			}
		}
		build(1,0,0,n-1,n-1);
		dfs(1);
		puts("");
	}
    return 0;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值