石家庄网站建设推广公司注册自己的网站
题目:
思路:
简单的模拟题,模拟题好麻烦,但是思路走好就可以。首先我们可以求出每一行,红,蓝,白的个数。涂蓝色和白色为了涂色更少,所以涂蓝色要选择第i行蓝色个数最多的,白色也是。但是我考虑到如果列数是4的话,蓝蓝白白。所以我手动将其中白色优先级最高,第二次遍历跳过白色格子最多的那一行,寻找蓝色格子个数最多的那一行。这样就避免问题了。最后,蓝色那一行需要修改的格子+白色那一行需要修改的格子+(n-2)行需要修改的红色格子就是答案。
代码如下:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct Node{int w,b,r;
};
Node num[51];
int n,m;
string s[51];int main(void)
{cin >> n >> m;for(int i = 0 ; i < n; i++){cin >> s[i];for(int j = 0 ; j < m ; j++){if(s[i][j] == 'W') num[i].w++;if(s[i][j] == 'B') num[i].b++;if(s[i][j] == 'R') num[i].r++;}}int pos1 = -1;int pos2 = -1;int cnt1 = -1;int cnt2 = -1;for(int i = 0 ; i < n ; i++){if(cnt1 < num[i].w){cnt1 = num[i].w;pos1 = i;}}for(int i = 0 ; i < n ; i++){if(i == pos1)continue;if(cnt2 < num[i].b){cnt2 = num[i].b;pos2 = i; } }int sum = 0;//记录n-2行的红色个数 for(int i = 0 ; i < n ; i++){if(i == pos1)continue;if(i == pos2)continue;sum = sum + num[i].r;}int all = (m-cnt1) + (m-cnt2) + (n-2)*m-sum;cout <<all; return 0;
}