我有一道题目,只能写出六十分,没有任何编译错误和时间超限。
题目是这样的



#include<stdio.h>
#include<string.h>
int main() {
int time;
scanf("%d", &time);
getchar();
int vectors[4][2] = { {1,0},{0,1},{1,1},{1,-1} };//下,右,右下,左下
for (int i = 0; i < time; i++) {
char board[20][21] = { 0 };
for (int j = 0; j < 20; j++) {
scanf("%s", board[j]);
}
//此时我已经把整张地图输入了
//开始进行后手判断,能不能一步下死先手
int can_lose = 0;
for (int j = 0; j < 20; j++) {
for (int k = 0; k < 20; k++) {
if (board[j][k] == '*') {
int found_next = 1;
int lose_x = j;
int lose_y = k;
for (int d = 0; d < 4; d++) {
int lose_move_x = j;
int lose_move_y = k;
int found_empty = 0;
int found_ememy = 0;
for (int m = 0; m < 4; m++) {
if (board[lose_move_x + vectors[d][0]][lose_move_y + vectors[d][1]] == '*') {
found_next++;
}
else if (board[lose_move_x + vectors[d][0]][lose_move_y + vectors[d][1]] == '_') {
found_empty++;
}
else {
if (m < 3) {
found_ememy++;
}
}
lose_move_x += vectors[d][0];
lose_move_y += vectors[d][1];
}
if (found_next == 4 && found_ememy == 0) {//存在连续四个*
if (found_empty == 1) {
can_lose = 1;
}
else {
if (board[lose_x - vectors[d][0]][lose_y - vectors[d][1]] == '_') {
can_lose = 1;
}
}
}
if (can_lose == 1) {
break;
}
found_next = 1;
}
}
if (can_lose) {
break;
}
}
if (can_lose) {
break;
}
}
if (can_lose) {
printf("Lose\n");
continue;
}
else {
int can_win = 0;
for (int j = 0; j < 20; j++) {
for (int k = 0; k < 20; k++) {
if (board[j][k] == '#') {
int win_line = 0;
int found_now = 1;
int now_x = j;
int now_y = k;
int single_empty = 0;
int double_empty = 0;
for (int d = 0; d < 4; d++) {
int now_move_x = j;
int now_move_y = k;
while (board[now_move_x + vectors[d][0]][now_move_y + vectors[d][1]] == '#') {
found_now++;
now_move_x += vectors[d][0];
now_move_y += vectors[d][1];
if (found_now == 4) {
win_line++;
if (board[now_move_x + vectors[d][0]][now_move_y + vectors[d][1]] == '_' && board[now_x - vectors[d][0]][now_y - vectors[d][1]] == '_') {
double_empty++;
}
else if (board[now_move_x + vectors[d][0]][now_move_y + vectors[d][1]] == '_' || board[now_x - vectors[d][0]][now_y - vectors[d][1]] == '_') {
single_empty++;
}
if (win_line == 1) {
if (double_empty == 1) {
can_win = 1;
}
}
else if (win_line > 1) {
if (double_empty >= 1 || single_empty >= 2) {
can_win = 1;
}
}
break;
}
}
if (can_win) {
break;
}
found_now = 1;
}
}
if (can_win) {
break;
}
}
if (can_win) {
break;
}
}
if (can_win) {
printf("Win\n");
}
else {
printf("Not Sure\n");
}
}
}
return 0;
}