很明显只需要构造成最大最小然后进行排序
在进行二分即可找到理论上最大最小
注意这里不能只使用单个最大最小字符,应该使用整个字符串取比较
C++ 代码
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
const int N=1e5+10;
string aa[N],bb[N];
string xx[N],yy[N];
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
string s;
cin>>s;
sort(s.begin(),s.end());
aa[i]=s;
reverse(s.begin(),s.end());
bb[i]=s;
xx[i]=aa[i];
yy[i]=bb[i];
}
sort(xx+1,xx+1+n);
sort(yy+1,yy+1+n);
for(int i=1;i<=n;i++)
{
int l=1,r=n;
while(l<r)
{
int mid=l+r>>1;
if(aa[i]<=yy[mid])r=mid;
else l=mid+1;
}
cout<<l;
l=1,r=n;
while(l<r)
{
int mid=l+r+1>>1;
if(bb[i]>=xx[mid])l=mid;
else r=mid-1;
}
cout<<" "<<l<<endl;
}
}