求优化
  • 板块P1331 海战
  • 楼主hola0826
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/11/30 12:51
  • 上次更新2024/11/30 14:50:27
查看原帖
求优化
1533940
hola0826楼主2024/11/30 12:51
#include <iostream>
using namespace std;
struct queqe {
    int x;
    int y;
}q[10000000], q2[100000000];
int main() {
    int r, c;
    cin >> r >> c;
    char map[1010][1010] = { '.' };
    int v[1010][1010] = { 0 };
    for (int i = 0; i < r; i++) {
        for (int j = 0; j < c; j++) {
            cin >> map[i][j];
            v[i][j] = 1;
        }
    }
    int head2 = -1;
    int head = -1;
    q[0].x = 0;
    q[0].y = 0;
    head++;
    int xx, yy, x, y;//x>r y>c
    int xx2, yy2, x2, y2;
    int dp[5][2] = { {1,0},{-1,0},{0,1},{0,-1} ,{0,0} };
    int cnt = 0;
    int flag = 0;
    int cnt2 = 0;
    for (int i = 0; i < r - 1; i++) {
        if (flag == 1) {
            break;
        }
        for (int j = 0; j < c - 1; j++) {
            cnt2 = 0;
            if (map[i][j] == '#') {
                cnt2++;
            }
            if (map[i + 1][j] == '#') {
                cnt2++;
            }
            if (map[i][j + 1] == '#') {
                cnt2++;
            }
            if (map[i + 1][j + 1] == '#') {
                cnt2++;
            }
            if (cnt2 == 3) {
                flag = 1;
                break;
            }
        }
    }
    while (head != -1 && flag == 0) {
        x = q[head].x;
        y = q[head].y;
        head--;
        for (int i = 0; i < 5; i++) {
            xx = x + dp[i][0];
            yy = y + dp[i][1];
            if (xx >= 0 && xx < r && yy >= 0 && yy < c && v[xx][yy] == 1) {
                v[xx][yy] = 0;
                if (map[xx][yy] == '.') {
                    head++;
                    q[head].x = xx;
                    q[head].y = yy;
                    continue;
                }
                else {
                    head2 = 0;
                    cnt++;
                    q2[0].x = xx;
                    q2[0].y = yy;
                    while (head2 != -1) {
                        x2 = q2[head2].x;
                        y2 = q2[head2].y;
                        head2--;
                        for (int j = 0; j < 4; j++) {
                            xx2 = x2 + dp[j][0];
                            yy2 = y2 + dp[j][1];
                            if (xx2 >= 0 && xx2 < r && yy2 >= 0 && yy2 < c && v[xx2][yy2] == 1 && map[xx2][yy2] == '#') {
                                v[xx2][yy2] = 0;
                                head2++;
                                q2[head2].x = xx2;
                                q2[head2].y = yy2;
                            }
                        }
                    }
                }
            }
        }
    }
    if (flag == 1) {
        printf("Bad placement.");
    }
    else {
        printf("There are %d ships.", cnt);
    }
    return 0;
}

代码有优化空间么

2024/11/30 12:51
加载中...