把第二种的scanf换成cin在去掉getchar()就ac了本来全wa 求解!!!
第一种改后的(ac的)
#include<bits/stdc++.h>
#define abc(i,j,k) for(int i=(int)(j);i<=(int)(k);i++)
#define cba(i,j,k) for(int i=(int)(j);i>=(int)(k);i--)
#define INF 0x3f3f3f3f
#define _INF 0xc0c0c0c0
typedef long long ll;
using namespace std;
char Map[55][55];
int line[55][6];
int main()
{
int n,m;
cin >> n >> m;
abc(i,1,n)
{
abc(j,1,m)
{
cin >> Map[i][j];
if(Map[i][j] == 'W')
line[i][1]++;
if(Map[i][j] == 'B')
line[i][2]++;
if(Map[i][j] == 'R')
line[i][3]++;
}
getchar();
}
int minx = 999999;
int ans = 0;
abc( i , 1 ,n - 2)
{
abc( j , 1 , n - 2)
{
ans = 0;
if(i + j > n - 1)
continue;
abc(k, 1 , i)
{
ans += (line[k][2] + line[k][3]);
}
abc(k,i + 1, i + j)
{
ans += (line[k][1] + line[k][3]);
}
abc(k,i + j + 1,n)
{
ans += (line[k][1] + line[k][2]);
}
if(ans < minx)
minx = ans;
ans = 0;
}
}
cout << minx << endl;
}
第二种改前的(全wa的)
#include<bits/stdc++.h>
#define abc(i,j,k) for(int i=(int)(j);i<=(int)(k);i++)
#define cba(i,j,k) for(int i=(int)(j);i>=(int)(k);i--)
#define INF 0x3f3f3f3f
#define _INF 0xc0c0c0c0
typedef long long ll;
using namespace std;
char Map[55][55];
int line[55][6];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
getchar();
abc(i,1,n)
{
abc(j,1,m)
{
scanf("%c",&Map[i][j]);
if(Map[i][j] == 'W')
line[i][1]++;
if(Map[i][j] == 'B')
line[i][2]++;
if(Map[i][j] == 'R')
line[i][3]++;
}
getchar();
}
int minx = 999999;
int ans = 0;
abc( i , 1 ,n - 2)
{
abc( j , 1 , n - 2)
{
if(i + j > n - 1)
continue;
abc(k, 1 , i)
{
ans += (line[k][2] + line[k][3]);
}
abc(k,i + 1, i + j)
{
ans += (line[k][1] + line[k][3]);
}
abc(k,i + j + 1,n)
{
ans += (line[k][1] + line[k][2]);
}
if(ans < minx)
minx = ans;
ans = 0;
}
}
printf("%d\n",minx) ;
}
求dalao解答我很想知道