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

猜你喜欢

转载自www.cnblogs.com/acmLLF/p/13386943.html