为什么用scanf读入会RE

P1141 01迷宫

Aya_tt @ 2023-12-25 20:44:16

#include<bits/stdc++.h>
using namespace std;
int n, T, ans[1010][1010], cnt, dir[4][2] = {{1, 0}, {-1, 0}, {0, -1}, {0, 1}};
char mp[1010][1010];
bool vis[1010][1010];
queue<pair<int, int> > q;
int main(){
    cin >> n >> T;
    for(register int i = 1;i <= n;i++){
        for(register int j = 1;j <= n;j++){
            //char a;
            //scanf("%c", &a);
            //mp[i][j] = a;
            cin >> mp[i][j];
        }
    }
    while(T--){
        int a, b;
        scanf("%d%d", &a, &b);
        if(ans[a][b] > 0){
            cout << ans[a][b] << endl;
            continue;
        }
        memset(vis, 0, sizeof vis);
        while(!q.empty()){
            q.pop();
        }
        queue<pair<int, int> > t;
        q.push(make_pair(a, b));
        t.push(make_pair(a, b));
        vis[a][b] = 1;
        cnt = 1; 
        while(!q.empty()){
            int x = q.front().first, y = q.front().second;
            q.pop();
            for(int i = 0;i < 4;i++){
                int xx = x + dir[i][0], yy = y + dir[i][1];
                if(!vis[xx][yy] && xx >= 1 &&  yy >= 1 && xx <= n && yy <= n && mp[xx][yy] != mp[x][y]){
                    cnt++;
                    q.push(make_pair(xx, yy));
                    t.push(make_pair(xx, yy));
                    vis[xx][yy] = 1;
                }
            }
        }
        while(!t.empty()){
            int x = t.front().first, y = t.front().second;
            ans[x][y] = cnt;
            t.pop();
        }
        cout << ans[a][b] << endl;
    }
} 

结果无误,但是TLE了第二个点


by L_MaJiaQi @ 2023-12-25 21:00:29

@Aya_tt scanf好像读不了char


by Terrible @ 2023-12-25 21:02:50

scanf("%c",&c); 等于 getchar() 等于 cin.get()

scanf(" %c",&c); 等于 cin>>c;

scanf 格式串中的空格表示将此处的空白字符(空格换行回车制表等)都筛去。


by Terrible @ 2023-12-25 21:03:54

字符串形式读入应该是:

    for(register int i = 1;i <= n;i++){
        //for(register int j = 1;j <= n;j++){
            //char a;
            scanf("%s", mp[i]+1);
        //}
    }

by Terrible @ 2023-12-25 21:07:37

TLE 的话是说你的程序做法需要再优化一下,打开题解区看看,可以只跑一遍完整地图就可以出所有询问的结果,你这样跑了 m 轮,是没有必要的,而且几乎不可能在 1s 内跑完。


by I_like_play_eggy @ 2024-03-30 22:07:32

我直接 string


|