P3392 把scanf改成cin就正确AC了
  • 板块P3392 涂国旗
  • 楼主Etsuya233
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/11/15 14:00
  • 上次更新2023/10/27 02:53:49
查看原帖
P3392 把scanf改成cin就正确AC了
839170
Etsuya233楼主2022/11/15 14:00

测试过多组数据,答案都一样。主要可以看看mian函数里的第一个for循环。我测试过了,用scanf和cin读取的字母个数都一样,为什么scanf就错了呢? 源代码:

#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);
}

改后代码:

#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);
}
2022/11/15 14:00
加载中...