这个为啥把cin改成scanf就错了
  • 板块P3392 涂国旗
  • 楼主dfxgbm
  • 当前回复9
  • 已保存回复9
  • 发布时间2021/2/8 10:19
  • 上次更新2023/11/5 03:33:54
查看原帖
这个为啥把cin改成scanf就错了
468029
dfxgbm楼主2021/2/8 10:19
#include <cstdio>
#include <algorithm>
#include <iostream>
const int M=52;
using namespace std;
char comp[M][M];
int n,m;
void fillin(int w,int r,int b) {
	int i;
	for(i=0; i<w; i++)
		fill(comp[i],comp[i]+m,'W');
	for(i=w; i<n-r; i++)
		fill(comp[i],comp[i]+m,'B');
	for(i=n-r; i<n; i++)
		fill(comp[i],comp[i]+m,'R');
}

int compare(char source[][M],const char tar[][M]) {
	int cnt=0; //cnt为次数
	for(int i=0; i<n; i++) {
		for(int j=0; j<m; j++) {
			if(source[i][j]!=tar[i][j])
				cnt++;
		}
	}
	return cnt;
}

int main() {
	int i,j,res=2500;
	char flag[M][M];
	int w,b,r;
	//分别代表三种颜色的行数
	scanf("%d%d",&n,&m);
	getchar();
	for(i=0; i<n; i++) {
        for(j=0; j<m; j++)
        cin>>flag[i][j];
    //    	flag[i][j]=getchar();
    //        scanf("%c",&flag[i][j]);
    //    getchar();
	}
	for(w=1; w<=n-2; w++) {
		for(b=1; b<=n-w-1; b++) {
			r=n-w-b;
			if(r>=1) {
				fillin(w,r,b);
				res=min(res,compare(flag,comp));
			}
		}
	}
	printf("%d",res);
	return 0;
}
2021/2/8 10:19
加载中...