社区讨论

P3392 把scanf改成cin就正确AC了

P3392涂条纹参与者 4已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lo7jm3ye
此快照首次捕获于
2023/10/27 02:53
2 年前
此快照最后确认于
2023/10/27 02:53
2 年前
查看原帖
测试过多组数据,答案都一样。主要可以看看mian函数里的第一个for循环。我测试过了,用scanf和cin读取的字母个数都一样,为什么scanf就错了呢? 源代码:
CPP
#include <cstdio>

typedef struct row{
	int w, b, r;
	row(){
		w = b = r = 0;
	}
} Row;

int main(){
	int n, m;
	scanf("%d%d", &n, &m);
	Row data[n];
	getchar();
	for(int i = 0 ; i < n; i++){
		for(int j = 0; j < m; j++){
			char c;
			scanf("%c", &c);
			if(c == 'W') data[i].w++;
			else if(c == 'R') data[i].r++;
			else data[i].b++;
		}
		getchar();
//		printf("%d: w = %d, b = %d, r = %d\n", i, data[i].w, data[i].b, data[i].r);
	}
	
//	printf("\n------\n");
	
	int cost = 0, minimun = 50000;
	int w = 0, b = 0, r = 0;
//	Algorithm
	for(int i = 0; i <= n - 3; i++){
		for(int j = n - 1; j >= i + 2; j--){
			w = 0, b = 0, r = 0;
			//Calc
			for(int k = 0; k <= i; k++){
				w += data[k].b + data[k].r;
			}
			for(int k = i + 1; k < j; k++){
				b += data[k].w + data[k].r;
			}
			for(int k = j; k <= n - 1; k++){
				r += data[k].w + data[k].b;
			}
//			printf("i = %d, j = %d, w = %d, b = %d, r = %d\n", i, j, w, b, r);
			cost = w + b + r;
//			printf("%d\n", cost);
			minimun = (cost < minimun)? cost: minimun;
		}
	}
	
	printf("%d", minimun);
}
改后代码:
CPP
#include <cstdio>
#include <iostream>
using namespace std;

typedef struct row{
	int w, b, r;
	row(){
		w = b = r = 0;
	}
} Row;

int main(){
	int n, m;
	scanf("%d%d", &n, &m);
	Row data[n];
	getchar();
	for(int i = 0 ; i < n; i++){
		for(int j = 0; j < m; j++){
			char c;
//			scanf("%c", &c);
			cin >> c;
			if(c == 'W') data[i].w++;
			else if(c == 'R') data[i].r++;
			else data[i].b++;
		}
		getchar();
//		printf("%d: w = %d, b = %d, r = %d\n", i, data[i].w, data[i].b, data[i].r);
	}
	
//	printf("\n------\n");
	
	int cost = 0, minimun = 50000;
	int w = 0, b = 0, r = 0;
//	Algorithm
	for(int i = 0; i <= n - 3; i++){
		for(int j = n - 1; j >= i + 2; j--){
			w = 0, b = 0, r = 0;
			//Calc
			for(int k = 0; k <= i; k++){
				w += data[k].b + data[k].r;
			}
			for(int k = i + 1; k < j; k++){
				b += data[k].w + data[k].r;
			}
			for(int k = j; k <= n - 1; k++){
				r += data[k].w + data[k].b;
			}
//			printf("i = %d, j = %d, w = %d, b = %d, r = %d\n", i, j, w, b, r);
			cost = w + b + r;
//			printf("%d\n", cost);
			minimun = (cost < minimun)? cost: minimun;
		}
	}
	
	printf("%d", minimun);
}

回复

4 条回复,欢迎继续交流。

正在加载回复...