题意:每次可以将较小的字母反转成较大的字母
贪心一下,尽量把操作挪到最大的字母那边 ,然后统计答案
#include <bits/stdc++.h> using namespace std; int x[20][20]; int main() { int t; cin>>t; while(t--) { for(int i=0; i<20; i++) for(int j=0; j<20; j++) x[i][j]=0; int n; cin>>n; string a,b; cin>>a>>b; int flag=0; for(int i=0; i<n; i++) { if(a[i]>b[i]) { flag=-1; break; } if(a[i]!=b[i]) x[a[i]-‘a‘][b[i]-‘a‘]++; } if(flag==-1) { cout<<flag<<endl; continue; } int ans=0; for(int i=0; i<20; i++) for(int j=0; j<20; j++) { if(i==19&&x[i][j]) { ans++; continue; } if(x[i][j]) { ans++; for(int ii=j+1; ii<20; ii++) { if(x[i][ii]) { x[j][ii]++; } } break; } } cout<<ans<<endl; } }
Codeforces Round #659 (Div. 2) C. String Transformation 1
原文:https://www.cnblogs.com/acmLLF/p/13386943.html