📄 1467.cpp
字号:
/* This Code is Submitted by wywcgs for Problem 1467 on 2006-01-13 at 21:53:28 */
#include <cstdio>
#include <cstring>
#include <cassert>
const int MAX = 512;
const int K_MAX = 64;
int board[MAX][K_MAX], cl;
char code[MAX*MAX];
void read(int, int, int, int);
inline bool same(int);
int main()
{
int i, j, n;
char line[K_MAX];
while(gets(line) != NULL) {
sscanf(line, "%*s %*s %d", &n); cl = 0;
gets(line); gets(line);
int l = n >> 3;
for(i = 0; i < n; i++)
for(j = 0; j < l; j++)
scanf(" 0x%x, ", &board[i][j]);
read(0, 0, n-1, n-1);
printf("%d\n%s\n", n, code);
gets(line);
}
return 0;
}
void read(int x1, int y1, int x2, int y2)
{
int l = cl+1;
if(x1 != x2 || y1 != y2) {
int mx = (x1 + x2) / 2, my = (y1 + y2) / 2;
code[cl++] = 'Q';
read(x1, y1, mx, my); read(x1, my+1, mx, y2);
read(mx+1, y1, x2, my); read(mx+1, my+1, x2, y2);
if(same(l)) {
code[l-1] = code[l]; cl = l; code[l] = 0;
}
} else {
int r = board[x1][y1>>3] & (1<<(y1&7));
code[cl++] = (r == 0) ? 'W' : 'B'; code[cl] = 0;
}
}
inline bool same(int l)
{
if(cl != l + 4) return false;
else {
int i;
for(i = 1; i < 4; i++)
if(code[l+i] != code[l]) return false;
return true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -