1. 程式人生 > 實用技巧 >Codeforces Round #659 (Div. 2) C. String Transformation 1

Codeforces Round #659 (Div. 2) C. String Transformation 1

題意:每次可以將較小的字母反轉成較大的字母

貪心一下,儘量把操作挪到最大的字母那邊 ,然後統計答案

#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; } }