1. 程式人生 > >洛谷評測機BUG(應該是) _未完成

洛谷評測機BUG(應該是) _未完成

new line main 單個字符 ref using set mem show

此問題由洛谷p1746引出(之前出過類似問題沒在意)

傳送門

以下是兩個差不多的程序,(只有main函數中的輸入不同,第一個程序迷之WA,第二個程序AC)

#include <bits/stdc++.h>
using namespace std;
int qx,qy,zx,zy;
int n,m;
int xx[5] = {0,0,0,-1,1},yy[5] = {0,-1,1,0,0};
char a[1001][1001];
queue<int>q;
int tot[1001][1001];
int qx,qy,zx,zy;
void gs() {
    while
(q.empty() == 0) { int x = q.front(); q.pop(); int y = q.front(); q.pop(); for(int k = 1; k <= 4; k++) { int x2 = x + xx[k]; int y2 = y + yy[k]; if(a[x2][y2] == 0 && x2 >= 1 && y2 >= 1 && x2 <=n && y2 <= m) { q.push(x2); q.push(y2); tot[x2][y2]
= tot[x][y] + 1; a[x2][y2] = 1; } if(x2 == zx && y2 == zy) { tot[x2][y2] = tot[x][y] + 1; cout<<tot[x2][y2]<<endl; while(q.empty() == 0){ q.pop(); } memset(tot,
0,sizeof(tot)); return ; } } } cout<<-1<<endl; return ; } int main() { scanf("%d%d",&n,&m); getchar(); for(int i=1; i<=n; i++) {//單個字符輸入+getcahr()讀入換行符 for(int j=1; j<=m; j++) { scanf("%c",&a[i][j]);//這裏改成getchar()也不對 } getchar(); } gs(); return 0; }

#include <bits/stdc++.h>
using namespace std;
int qx,qy,zx,zy;
int n;
int xx[5] = {0,0,0,-1,1},yy[5] = {0,-1,1,0,0};
char a[1001][1001];
queue<int>q;
int tot[1001][1001];
void gs() {
    while(q.empty() == 0) {
        int x = q.front();
        q.pop();
        int y = q.front();
        q.pop();
        for(int k = 1; k <= 4; k++) {
            int x2 = x + xx[k];
            int y2 = y + yy[k];
            if(a[x2][y2] == 0 && x2 >= 1 && y2 >= 1 && x2 <=n && y2 <= n) {
                q.push(x2);
                q.push(y2);
                tot[x2][y2] = tot[x][y] + 1;
                a[x2][y2] = 1;
            }
            if(x2 == zx && y2 == zy) {
                tot[x2][y2] = tot[x][y] + 1;
                cout<<tot[x2][y2];
                return ;
            }
        }
    }
}
int main() {
    scanf("%d",&n);
    getchar();
    for(int i=1; i<=n; i++) {
        scanf("%s", a[i] + 1);//整個字符串輸入
    }
    scanf("%d%d%d%d",&qx,&qy,&zx,&zy);
    q.push(qx);
    q.push(qy);
    gs();
    return 0;
}

小結:編譯器永遠沒錯,評測機可能有錯 別用getchar()

洛谷評測機BUG(應該是) _未完成