还没有到能够下载测试数据的地步,求助一下只过了两组是因为哪里的问题 代码如下
//russia flag
#include<bits/stdc++.h>
using namespace std;
int N,M,stage=2510;//n,m<=50
int tran,counter;
char rec[54][54];//////用copy判断
int stor[2510];////////两个不同类数组用逗号表达式隔开
void draw(char C,int line,int st){//颜料,终点,起点
for(int j=st;j<line;j++){
for(int i=0;i<M;i++){
if(rec[i][j]!=C)
/*rec[i][j]=C,这里如果改了的话不能重复使用*/tran++;
}
}
}
void dig(char col,int line){
if(col=='W'){//W给到的行数(之一)画完剩下的给B让B自己枚举
draw('W',line,0);//两行画完传递一个剩余行数给B
dig('B',N-line);
}
else if(col=='B'){//在递归函数内枚举B行数 ////////字符常量跟字符串标识错误
for(int i=1;i<=line-1/*上边的N-line,剩余行数-1给R留一个*/;i++){//i是B的行数
draw('B',N-line+i,N-line);
dig('R',line-i/*给R剩下的行数*/);
}
}
else if(col=='R'){
draw('R',N,N-line);
stor[counter]=tran;
tran=0;
counter++;
}//****注意是否有数组与循控参数对不起来的错误
}
int main(){
for(int i=0;i<2510;i++)
stor[i]=2510;
cin>>N>>M;
for(int v=0;v<N;v++)//储存(从[0][0]开始)
for(int p=0;p<M;p++)
cin>>rec[p][v];
for(int i=1;i<N-1/*最大值为N-2*/;i++) //枚举A
dig('W',i);
for(int i=0;i<(N-2)*(N-1);i++){
// cout<<stor[i]<<" ";
if(stor[i]<stage){//////////////////////////*stor[i]没有值*//*/*/*/*/*/
stage=stor[i];
}
}
cout<<stage;
return 0;
}