⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1467.cpp

📁 哈尔滨工业大学ACM 竞赛网上在线试题集锦的源代码
💻 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 + -