显示Wrong Answer.wrong answer Too short on line 97.
/*************************
@Author:xiaoPnibiebai
@Date:2022-08-31 10:55:44
**************************/
#include<bits/stdc++.h>
#define ll long long
#define JB std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);
#define endl "\n"
using namespace std;
int N, M;
int n, m;
map< pair<int, int>, pair<int, int> >fa;
char mp[4000][4000];
int vp[4000][4000];
int dep_sum[10000];
bool v[4000];
void dfs(int dep, int wid, int l, int r, bool way, int DEP) {
if(l>r) return ;
int mid = (l + r) / 2;
if (wid == mid) {
DEP++;
dep_sum[DEP]++;//树的每个深度的点的个数
fa[make_pair(DEP, dep_sum[DEP])] = make_pair(dep, wid);//记录节点在字符数组里面的坐标
mp[dep][wid] = 'o';
vp[dep][wid] = 1;
if (dep < N) {
if (mid % 2 == 1) {
dfs(dep + 1, wid - 1, l, mid - 1, 0, DEP);
dfs(dep + 1, wid + 1, mid + 1, r, 1, DEP);
} else {
dfs(dep + 1, wid - 1, l, mid, 0, DEP);
dfs(dep + 1, wid + 1, mid, r, 1, DEP);
}
} else return ;
} else {
vp[dep][wid] = -1;
if (way) {
mp[dep][wid] = '\\';
dfs(dep + 1, wid + 1, l, r, way, DEP);
} else {
mp[dep][wid] = '/';
dfs(dep + 1, wid - 1, l, r, way, DEP);
}
}
}
void del_up(int x, int y, bool way) {
if (x > N || x < 1) return ;
if (y < 1 || y > M) return ;
if (mp[x][y] == 'o') return ;
mp[x][y] = ' ';
if (way == 0) del_up(x - 1, y - 1, way);
if (way == 1) del_up(x - 1, y + 1, way);
}
void del(int x, int y, bool way) {
if (x > N) return ;
if (y < 1 || y > M) return ;
if (mp[x][y] == ' ') return ;
if (vp[x][y] == 1) {
mp[x][y] = ' ';
del(x + 1, y - 1, 0);
del(x + 1, y + 1, 1);
} else if(vp[x][y]==-1){
mp[x][y] = ' ';
if (way == 0) del(x + 1, y - 1, 0);
if (way == 1) del(x + 1, y + 1, 1);
}
}
int main() {
cin >> n >> m;
M = pow(2, n - 1) + pow(2, n - 2) * 3 + pow(2, n - 2) - 1;//计算宽
N = (M + 1) / 2;//计算高
//cout<<N<<" "<<M<<endl;
memset(mp,' ',sizeof(mp));
dfs(1, N, 0, M + 1, 1, 0);//从根节点开始从上往下建树
for (int i = 1; i <= m; i++) {
int x, y;
cin >> x >> y;
pair<int, int>k = fa[make_pair(x, y)];
del(k.first, k.second, 0);// 往下面删
del_up(k.first, k.second, y % 2);//往上删
}
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++) {
cout << mp[i][j];
}
cout << endl;
}
return 0;
}