0
已解决
李庚午
中级守护
中级守护
RT,调了很久也过不了样例……蒟蒻求指教
#include<bits/stdc++.h>
using namespace std;
int m,n,total,last,del_count,w,h;
int tree[1<<10];
char p[(1<<8)*3][(1<<8)*6];
void init()
{
for(int i=1;i<=(1<<10);i++) tree[i]=1;
}
int get_id(int x,int y)
{
return pow(2,x-1)-1+y;
}
void del(int id)
{
if (id>total) return;
tree[id]=0;
del(id*2);
del(id*2+1);
}
void draw(int id,int& x,int& y)
{
if (id>last)
{
x=h;
int tmp=id-last;
y=6*((tmp-1)/2)+(tmp%2!=0?1:5);
if (tree[id]) p[x][y]='o';
else del_count++;
return;
}
int lx,ly,rx,ry;
draw(id*2,lx,ly);
draw(id*2+1,rx,ry);
y=(ly+ly)/2;
x=lx-(ry-ly)/2;
if (tree[id])
{
p[x][y]='o';
for(int i=1;i<(ry-ly)/2;i++)
{
if(tree[id*2]) p[x+i][y-i]='/';
if(tree[id*2+1]) p[x+i][y+i]='\\';
}
}
else del_count++;
}
int main()
{
cin>>m>>n;
total=pow(2,m)-1;
last=pow(2,m-1)-1;
int n0=last+1;
w=n0/2*5+n0/2-1;
h=w/2+1;
init();
for(int i=1;i<=n;i++)
{
int x,y;
cin>>x>>y;
del(get_id(x,y));
}
int x,y;
draw(1,x,y);
cout<<total-del_count<<endl;
for(int i=1;i<=h;i++)
{
for(int j=1;j<=w;j++)
{
if(p[i][j]=='\\'||p[i][j]=='/'||p[i][j]=='o') cout<<p[i][j];
else cout<<" ";
}
cout<<endl;
}
return 0;
}