原题链接:https://codeforces.ml/contest/1281/problem/B
这道题做的我自闭了。。。。。
官方题解说O(l s l2)也能过,于是我就写了个s方的代码,WA了16遍。。。。
至今都不知道咋错的。。。。WAtest18
错误代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
char s[5500],c[5500];
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>s>>c;
int ls=strlen(s),lc=strlen(c);
int flag=-1,kk=1;
int l=min(ls,lc);
for(int i=0;i<l;i++)
{
if(s[i]<c[i])
{flag=1;break;}
if(s[i]==c[i]&&kk==1)
{
int df=0;
for(int j=i+1;j<ls;j++)
{
if(s[j]<c[i])
{char tmp=s[j];s[j]=s[i];s[i]=tmp;df=1;break;}
}
if(df==1)
{flag=1;break;}
}
if(s[i]>c[i]&&kk==1)
{
int df=0;
for(int j=i+1;j<ls;j++)
{
if(s[j]<c[i])
{char tmp=s[j];s[j]=s[i];s[i]=tmp;df=1;break;}
}
if(df==1)
{flag=1;break;}
for(int j=i+1;j<l;j++)
{
if(s[j]==c[i]&&s[i]<c[j])
{char tmp=s[j];s[j]=s[i];s[i]=tmp;df=1;break;}
}
if(df==1)
{kk--;continue;}
for(int j=l;j<ls;j++)
{
if(s[j]==c[i])
{char tmp=s[j];s[j]=s[i];s[i]=tmp;df=1;break;}
}
if(df==1)
{kk--;continue;}
for(int j=i+1;j<l;j++)
{
if(s[j]==c[i]&&s[i]==c[j])
{char tmp=s[j];s[j]=s[i];s[i]=tmp;df=1;break;}
}
if(df==0)
{flag=0;break;}
kk--;
}
if(s[i]>c[i]&&kk==0)
{flag=0;break;}
}
if(ls<lc)
{
if(flag==0)
{cout<<"---"<<endl;}
else
{cout<<s<<endl;}
}
else
{
if(flag==1)
{cout<<s<<endl;}
else
{cout<<"---"<<endl;}
}
}
return 0;
}
希望有大佬给找找错误。。。。。
AC代码:
#include <bits/stdc++.h>
using namespace std;
char s[5500],c[5500];
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>s>>c;
if(strcmp(s,c)<0)
{cout<<s<<endl;continue;}
string u=s;
sort(u.begin(),u.end());//string类型排序写法
int flag=0;
for(int i=0;i<u.size();i++)
{
if(flag)
{break;}
if(u[i]!=s[i])
{
for(int j=u.size()-1;j>i;j--)
{
if(s[j]==u[i])
{
swap(s[i],s[j]);
flag=1;break;
}
}
}
}
if(strcmp(s,c)<0)
{cout<<s<<endl;}
else
{cout<<"---"<<endl;}
}
return 0;
}