You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
1.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include <bits/stdc++.h>
using namespace std;
const int N = 110;
char a[N][N];
int MIN = 0x3f3f3f3f;
int n, m;
/**
* 功能计算在白x行蓝y行红z行的情况下修改的数量
* @param x 白色行数
* @param y 蓝色行数
* @param z 红色行数
* @return 修改的数量
*/
int check(int x, int y, int z) {
//检查现在前x行白的个数
int w = 0, r = 0, b = 0;
int s = 0;
//白的现有多少个?
for (int i = 1; i <= x; i++)
for (int j = 1; j <= m; j++)
if (a[i][j] == 'W') w++;
//修改量+ m*x-w个
s += m * x - w;
//蓝的现有多少个?
for (int i = x + 1; i <= x + y; i++)
for (int j = 1; j <= m; j++)
if (a[i][j] == 'B') b++;
//修改量+ m*y-b个
s += m * y - b;
//红的现有多少个?
for (int i = x + y + 1; i <= x + y + z; i++)
for (int j = 1; j <= m; j++)
if (a[i][j] == 'R') r++;
//修改量+ m*z-r个
s += m * z - r;
//返回当前情况下的修改量
return s;
}
int main() {
//n行m列的国旗
cin >> n >> m;
//读入现有的国旗
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> a[i][j];
//白色可能的范围是1行至n-2行行数
for (int i = 1; i <= n - 2; i++)
//蓝色可能的范围是1行至n-2行行数
for (int j = 1; j <= n - 2; j++) {
//红色的行数
int k = n - i - j;
//如果红色不存在那么就是没用的答案j也没有必要再增大了使用 continue无意义直接break
if (k <= 0) break;
//在白i行蓝j行红k行的情况下计算最小的修改量取最后的最小值
MIN = min(MIN, check(i, j, k));
}
//输出最小值
cout << MIN << endl;
return 0;
}