#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
char g[1025][1025];
char line[10000];
int idx;
void build(int k,int lx,int ly,int rx,int ry)
{
char type=line[idx++];
if(type=='*')
{
int mx=(lx+rx)>>1,my=(ly+ry)>>1;
build(k*4,lx,ly,mx,my);
build(k*4+1,mx+1,ly,rx,my);
build(k*4+2,lx,my+1,mx,ry);
build(k*4+2,mx+1,my+1,rx,ry);
}
else
{
for(int i=ly;i<=ry;i++)
for(int j=lx;j<=rx;j++)
g[i][j]=type;
}
}
int main()
{
int n,casei;
scanf("%d",&casei);
getchar();
while(casei--)
{
scanf("%d %s",&n,line);
if(__builtin_popcount(n)!=1||n<=1)
{
puts("Invalid length");
continue;
}
idx=0;
build(1,0,0,n-1,n-1);
int flag=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(g[i][j]=='1')
{
int l=j,r=j;
while(r<n&&g[i][r]=='1') r++;
if(flag)
printf(",");
flag=1;
if(r-1==l)
printf("(%d,%d)",j+1,i+1);
else
printf("(%d-%d,%d)",j+1,r,i+1);
j=r;
}
}
}
puts("");
}
return 0;
}
UVA 11948 四叉树 (入门基础题)
最新推荐文章于 2022-04-29 10:38:27 发布