code:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,tn,tm;
char mp[3100][3100];
struct node{
int x,y;
}t[15][15];
void destroy(int x,int y)
{
int x1=x-1,y1=y-1,x2=x+1,y2=y+1;
//left:
if(mp[x1][y1]=='\\')
{
while(x1>0&&y1>0&&mp[x1][y1]!='o')
{
x1--,y1--;
}
x1++,y1++;
while(x2<=tn&&y2<=tm&&mp[x2][y2]!=0)
{
x2++,y2++;
}
x2--,y2--;
for(int i=x1;i<=x2;++i)
{
for(int j=y1;j<=y2;++j)
{
mp[i][j]=' ';
}
}
}
else
{
x1=x2=x,y1=y2=y;
x1--,y1++;x2++,y2--;
while(x1>0&&y1<=tm&&mp[x1][y1]!='o')
{
x1--,y1++;
}
x1++,y1--;
while(x2<=tn&&y2>0&&mp[x2][y2]!=0)
{
x2++,y2--;
}
x2--,y2++;
for(int i=min(x1,x2);i<=max(x2,x1);++i)
{
for(int j=min(y2,y1);j<=max(y1,y2);++j)
{
mp[i][j]=' ';
}
}
}
}
int main(){
cin>>m>>n;
int kg=3;
tm=(1<<(m-1))+((1<<(m-1))/2)*3+((1<<(m-1))/2-1);
for(int i=tm;i>=1;i-=2,tn++);
for(int i=1;i<=tn;++i)
{
for(int j=1;j<=tm;++j)
{
mp[i][j]=' ';
}
}
int last=kg,kg2=1;
int X,Y;
for(int i=tn;i>=1;--i,kg-=2,kg2+=2)
{
if(i==tn)
{
for(int j=1;j<=tm;j+=6)
{
mp[i][j]='o';
mp[i][j+4]='o';
}
}
else if(kg<0)
{
kg=kg2;
for(int j=1+tn-i;j<=tm-tn+i;++j)
{
mp[i][j]='o';
j+=kg;
}
}
else
{
for(int j=1+tn-i;j<=tm;++j)
{
mp[i][j]='/';
j+=kg+1;
mp[i][j]='\\';
j+=kg2;
}
}
}
X=1;
for(int i=1;i<=tn;++i)
{
bool flag=0;
Y=0;
for(int j=1;j<=tm;++j)
{
if(mp[i][j]=='o')
{
flag=1;
t[X][++Y]={i,j};
// cout<<X<<' '<<Y<<' '<<i<<' '<<j<<endl;
}
}
if(flag)X++;
}
X--;
for(int i=1;i<=n;++i)
{
int x,y;
cin>>x>>y;
if(x==1)
{
continue;
}
destroy(t[x][y].x,t[x][y].y);
}
for(int i=1;i<=tn;++i)
{
for(int j=1;j<=tm;++j)
{
printf("%c",mp[i][j]);
}
puts("");
}
return 0;
}
WA on #7,#9