📄 gataxx.x
字号:
void sys_putchar(char c)
{
while (((*(int *)0x6003) & 1) == 0);
*(int *)0x6002 = (int )c;
}
char sys_getchar()
{
char ch;
while (((*(int *)0x6003) & 2) == 0);
ch = (char)((*(int *)0x6002) & 0xFF);
return ch;
}
const int limit = 7;
const int black = 1;
const int white = 2;
int[8][2]* dir;
int[limit+2][limit+2] map, tmp, tmp2;
int fromx, fromy, x, y;
void init()
{
dir = (int[8][2]*) <1, 0, 0, 1, 1, 1, 0xffff, 0, 0, 0xffff, 0xffff, 0xffff, 1, 0xffff, 0xffff, 1>;
int i, j, a;
for (i = 0; i <= limit + 1; i ++)
{
for (j = 0; j <= limit + 1; j ++)
{
map[i][j] = 0;
}
}
for (i = 1; i <= limit; i ++)
{
for (j = 1; j <= limit; j ++)
{
char ch;
while ((ch = sys_getchar()) != '0' && ch != '1' && ch != '2');
map[i][j] = (int)(ch - '0');
}
}
}
int gtr0(int num)
{
return (int)(!(num & 0x8000) && num);
}
int geq0(int num)
{
return (int)!(num & 0x8000);
}
void getscore2(int x1, int y1, int x2, int y2, int* score)
{
int q, i, j, max1, score1, k, p, x0, y0;
max1 = 0;
score1 = 0;
for (i = 0; i <= limit + 1; i ++)
{
for (j = 0; j <= limit + 1; j ++)
{
tmp[i][j] = map[i][j];
}
}
if (*score == 0) map[x1][y1] = 0;
map[x2][y2] = black;
for (j = 0; j < 8; j ++)
{
if (map[x2 + (*dir)[j][0]][y2 + (*dir)[j][1]] == white)
{
*score ++;
map[x2 + (*dir)[j][0]][y2 + (*dir)[j][1]] = black;
}
}
for (i = 1; i <= limit; i ++)
{
for (j = 1; j <= limit; j ++)
{
if (map[i][j] == white)
{
for (k = -2; k != 3; k ++)
{
for (p = -2; p != 3; p ++)
{
if (gtr0(k + i) && gtr0(j + p) && gtr0(8 - k - i) && gtr0(8 - p - j) && (k || p))
{
x0 = i + k; y0 = j + p;
if (map[x0][y0] == 0)
{
if (geq0(1 - (x0 - i)) && geq0(x0 - i + 1) && geq0(1 - (y0 - j)) && geq0(y0 - j + 1))
{
score1 = 1;
}
else
score1 = 0;
for (q = 0; q < 8; q ++)
{
if (map[(*dir)[q][0]+x0][(*dir)[q][1]+y0] == black)
{
score1 ++;
}
}
if (gtr0(score1 - max1))
{
max1 = score1;
}
}
}
}
}
}
}
}
for (i = 0; i <= limit + 1; i ++)
{
for (j = 0; j <= limit + 1; j ++)
{
map[i][j] = tmp[i][j];
}
}
// printf("%d %d***\n", max1, score);
*score = *score - max1;
}
void main2()
{
int max, score, k, p, i, j, x0, y0, q;
max = -90;
fromx = 0; fromy = 0; x = 0; y = 0;
for (i = 0; i <= limit + 1; i ++)
for (j = 0; j <= limit + 1; j ++)
tmp2[i][j] = 0;
for (i = 1; i <= limit; i ++)
{
for (j = 1; j <= limit; j ++)
{
if (map[i][j] == black)
{
for (k = -2; k != 3; k ++)
{
for (p = -2; p != 3; p ++)
{
if (gtr0(k + i) && gtr0(j + p) && gtr0(8 - k - i) && gtr0(8 - p - j) && (k || p))
{
x0 = i + k; y0 = j + p;
if (map[x0][y0] == 0)
{
if (geq0(1 - (x0 - i)) && geq0(x0 - i + 1) && geq0(1 - (y0 - j)) && geq0(y0 - j + 1))
score = 1;
else
{
score = 0;
tmp [i][j] = 0;
}
// printf("%d\n", score);
for (q = 0; q < 8; q ++)
{
if (map[(*dir)[q][0]+x0][(*dir)[q][1]+y0] == white)
{
score ++;
}
}
score = score << 3 + score << 1;
if (gtr0(score - max))
{
tmp = map;
if (geq0(1 - (x0 - i)) && geq0(x0 - i + 1) && geq0(1 - (y0 - j)) && geq0(y0 - j + 1))
i = i;
else
{
tmp [i][j] = 0;
}
tmp[x0][y0] = black;
for (q = 0; q < 8; q ++)
{
if (map[(*dir)[q][0]+x0][(*dir)[q][1]+y0] == white)
{
tmp[(*dir)[q][0]+x0][(*dir)[q][1]+y0] = black;
}
}
int a, b;
for (a = 1; a <= limit; a ++)
for (b = 1; b <= limit; b ++)
{
tmp2[a][b] = 0;
if (tmp[a][b] == 0)
{
int xx, yy, dx, dy;
xx = a;
yy = b;
int find;
find = 0;
for (dx = -2; dx != 3; dx ++)
for (dy = -2; dy != 3; dy ++)
if (gtr0(dx + xx) && gtr0(dy + yy) && gtr0(8 - dx - xx) && gtr0(y - dy - yy) && tmp[dx + xx][dy + yy] == white)
{ find = 1; break; }
if (find)
{
tmp2[a][b] = 1;
}
}
}
for (a = 1; a <= limit; a ++)
for (b = 1; b <= limit; b ++)
if (tmp[a][b] == black)
{
for (q = 0; q < 8; q ++)
if (tmp2[(*dir)[q][0]+a][(*dir)[q][1]+b] == 1)
{
score = score - 5;
break;
}
}
if (gtr0(score - max))
{
// printf("%d %d %d %d %d\n", score, i, j, x0, y0);
max = score;
fromx = i; fromy = j;
x = x0; y = y0;
}
}
}
}
}
}
}
}
}
// printf("%d\n", max);
}
void out()
{
sys_putchar((char)(fromx + '0'));
sys_putchar((char)(fromy + '0'));
sys_putchar((char)(x + '0'));
sys_putchar((char)(y + '0'));
}
void check()
{
int i, j, q;
q = 0;
for (i = 1; i <= limit; i ++)
{
for (j = 1; j <= limit; j ++)
{
if (map[i][j] == 0) q ++;
}
}
main2();
}
int main()
{
while (sys_getchar() == '1')
{
init();
check();
out();
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -