CF 1281B Azamon Web Services

原题链接:http://codeforces.com/problemset/problem/1281/B

题目大意: 给你两个字符串 s 和 c ,最多经过一次变换,使s的字典序小于c,输出变换后的s ,如果不成立输出---

思路: 直接对s进行遍历,找到经过一次变换后字典序最小的s。 要找字典序最小的s,变换时就要将位置靠后的,字典序小的换到前面。

ABACA    AABBC 

代码

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <stack>
#include <queue>
#include <cmath>
#define ll long long
#define pi 3.1415927
#define inf 0x3f3f3f3f
using namespace std;
string s,c,kk;
int main ()
{
    int n,m,i,t,sum,j,k,f=0;
    cin>>n;
    while(n--)
    {
        cin>>s>>c;
        k=s.length();
        f=0;
        for(i=0;i<k-1;++i){
            int jj=i;
            for(t=k-1;t>=jj+1;--t)
            {
            if(s[i]>s[t])
                i=t,j=t,f=1;  ///从后往前遍历,如果当前字符小的话就记录下来,
            }
            if(f){
                swap(s[jj],s[j]);  ///jj是记录的第一层循环的 i  ,j是找到的靠后的最小的字符
                break;
            }
        }
        //cout<<s<<endl;
        if(s<c)
            cout<<s<<endl;
        else
            cout<<"---"<<endl;
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/blowhail/p/12076074.html
今日推荐