rt,有无好心人帮我看看是哪里有越界,我是看不出来,马蜂可能有点丑,能尽量看懂是最好的 qwq。
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define mk make_pair
#define ll long long
#define space putchar(' ')
#define enter putchar('\n')
using namespace std;
inline int read() {
int x = 0, f = 1;
char c = getchar();
while (c < '0' || c > '9') f = c == '-' ? -1 : f, c = getchar();
while (c >= '0' && c <= '9') x = (x<<3)+(x<<1)+(c^48), c = getchar();
return x*f;
}
inline void write(int x) {
if (x < 0) x = -x, putchar('-');
if (x > 9) write(x/10);
putchar('0'+x%10);
}
typedef pair <int, int> pii;
const int N = 5e3+5;
int n, m, h, w, lh, lw;
char c[N][N];
pii p[200][2000];
void clear(int x, int y) {
if (c[x][y] == ' ') return;
if (c[x][y] == 'o') clear(x+1, y-1), clear(x+1, y+1);
else if (c[x][y] == '/') clear(x+1, y-1);
else clear(x+1, y+1);
c[x][y] = ' ';
}
int main() {
n = read(), m = read();
for (int i = 1; i <= 5e3; ++i)
for (int j = 1; j <= 5e3; ++j)
c[i][j] = ' ';
h = lh = 3, w = lw = 5;
c[1][3] = c[3][1] = c[3][5] = 'o', c[2][2] = '/', c[2][4] = '\\';
for (int k = 3; k <= n; ++k) {
h = lh<<1, w = (lw<<1)+1;
int mid = w+1>>1;
for (int i = 1; i <= lh; ++i)
for (int j = 1; j <= lw; ++j) {
c[i+lh][j] = c[i+lh][j+lw+1] = c[i][j];
c[i][j] = ' ';
}
c[1][mid] = 'o';
for (int i = 2; i <= lh; ++i) c[i][mid-i+1] = '/', c[i][mid+i-1] = '\\';
lh = h, lw = w;
}
for (int i = 1; i <= n; ++i) {
int x = i == n ? h : h-3*(1<<n-i-1)+1;
for (int y = 1, cnt = 0; y <= w; ++y) if (c[x][y] == 'o') p[i][++cnt] = mk(x, y);
}
while (m--) {
int i = read(), j = read();
int x = p[i][j].fi, y = p[i][j].se;
int d = j&1 ? 1 : -1;
clear(x, y);
while (c[x-1][y+d] != 'o') c[x][y] = ' ', --x, y += d;
c[x][y] = ' ';
}
for (int i = 1; i <= h; ++i, enter)
for (int j = 1; j <= w; ++j)
putchar(c[i][j]);
return 0;
}