AcWing 1996. 打乱字母
参考: 题解
对string排序:
string s;cin>>s;
sort(s.begin(),s.end());u.pb(s);a.pb(s);
reverse(s.begin(),s.end());d.pb(s);
注意: 一个字符串的正序肯定比它的倒序前(倒序排列中),所以不用删除其倒序,因为不会对答案有影响。 同理,它的倒序肯定在正序后(正序排列中),因此-1即可。 由于答案从1开始,所以记得要+1;
代码:
#include<bits/stdc++.h>
using namespace std;
#define fir(i,a,n) for(int i=a;i<=n;i++)
#define mem(a,x) memset(a,x,sizeof(a));
#define pb push_back
typedef long long ll;
const int N=5e4+10;
int n;
vector<string>a,u,d;
int main()
{
cin>>n;
fir(i,1,n)
{
string s;cin>>s;
sort(s.begin(),s.end());u.pb(s);a.pb(s);
reverse(s.begin(),s.end());d.pb(s);
}
sort(u.begin(),u.end());sort(d.begin(),d.end());
for(auto i:a)
{
int a1=lower_bound(d.begin(),d.end(),i)-d.begin()+1;
reverse(i.begin(),i.end());
int a2=upper_bound(u.begin(),u.end(),i)-u.begin();
cout<<a1<<" "<<a2<<endl;
}
return 0;
}
|