[C++] 纯文本查看 复制代码 #include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int,int>PII;
void solve(){
int n,m;
cin>>n>>m;
vector b(n+10,vector<int>(m+10));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char c;
cin>>c;
if(c=='W')b[i][j]=1;
}
}
auto check=[&](int x){
vector a=b;
vector<vector<char>>op(410);
int cnt=1e9,f=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
// cout<<a[i][j]<<" "<<1-x<<" \n"[j==m];
if(a[i][j]!=1-x){
f=0;
break;
}
}
}
if(f){
cnt=min(0ll,cnt);
return pair<int,vector<vector<char>>>{cnt,op};
}
for(int k=1;k<=400;k++){
int j=1;
for(int i=1;i<=n;i++){
if(i>=2)op[k].push_back('D');
int j2;
for(j2=m;j2>=1;j2--){
if(a[i][j2]==x)break;
}
if(i==n)j2=m;
for(int o=j+1;o<=j2;o++){
a[i][o]=1-a[i][o];
op[k].push_back('R');
}
a[i][j]=1-a[i][j];
if(j2>j)j=j2;
}
f=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]!=1-x){
f=0;
break;
}
}
}
if(f){
cnt=min(k,cnt);
break;
}
}
return pair<int,vector<vector<char>>>{cnt,op};;
};
int ans=1e18;
vector<vector<char>>op;
auto [ans2,op2]=check(0);
if(ans>ans2){
ans=ans2;
op=op2;
}
auto [ans3,op3]=check(1);
if(ans>ans3){
ans=ans3;
op=op3;
}
if(ans>400){
cout<<"NO"<<endl;
return ;
}
cout<<"YES"<<endl<<ans<<endl;
for(int i=1;i<=ans;i++){
for(auto j : op[i])cout<<j;
cout<<endl;
}
}
signed main(){
int t=1;ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>t;
while(t--)solve();
return 0;
} |