请问为什么有些题目可以用 cin 但不能用 scanf 和 getchar?
  • 板块学术版
  • 楼主OnlyExtreme
  • 当前回复9
  • 已保存回复9
  • 发布时间2021/7/7 20:31
  • 上次更新2023/11/4 18:27:36
查看原帖
请问为什么有些题目可以用 cin 但不能用 scanf 和 getchar?
247202
OnlyExtreme楼主2021/7/7 20:31

比如P1141里面

#include <bits/stdc++.h>
using namespace std;

struct node{
	int x, y, b;
};
int n, m, x, y, sum = 1, bl;
int mp[1010][1010], v[1010][1010];
int dx[4] = {0, 0, -1, 1};
int dy[4] = {-1, 1, 0, 0};
int a[1000001]; //记忆化 
char c;
queue<node> q;

int main()
{
	scanf("%d %d", &n, &m);
	for(int i=1; i<=n; i++){
		for(int j=1; j<=n; j++){
			cin >> c;
			mp[i][j] = c-'0';
		}
	}
	for(int i=1; i<=n; i++){
		for(int j=1; j<=n; j++){
			if(!v[i][j]){
				sum = 1;
				bl++;
				while(q.size()) q.pop();
				q.push((node){i, j, mp[i][j]});
				v[i][j] = bl;
				node cur, nxt;
				while(q.size()){
					cur = q.front();
					q.pop();
					for(int k=0; k<4; k++){
						nxt.x = cur.x+dx[k];
						nxt.y = cur.y+dy[k];
						nxt.b = mp[nxt.x][nxt.y];
						if(nxt.x<=0||nxt.y<=0||nxt.x>n||nxt.y>n) continue;
						else if(v[nxt.x][nxt.y] || cur.b==nxt.b) continue;
						sum++;
						v[nxt.x][nxt.y] = bl;
						q.push(nxt);
					}
				}
				a[bl] = sum;
			}
		}
	}
	for(int i=1; i<=m; i++){
		scanf("%d %d", &x, &y);
		printf("%d\n", a[v[x][y]]);
	}
	return 0;
}

输入字符的时候我一开始用的是getchar()不对,改成scanf()还是不行,之后cin可以。

2021/7/7 20:31
加载中...