第一题
#include<bits/stdc++.h>
using namespace std;
vector<string> sb(string str)
{
vector<string> r;
sort(str.begin(),str.end());
do{
string temp;
for(int i=0;i<str.size();i++)
{
temp+=str[i];
if(i!=str.size()-1) temp+="-";
}
r.push_back(temp);
}while(next_permutation(str.begin(),str.end()));
return r;
}
int main()
{
string temp;
cin>>temp;
unordered_map<char,int> mp;
for(int i=0;i<temp.size();i++)
{
mp[temp[i]]=i;
}
auto wtf = sb(temp);
sort(wtf.begin(),wtf.end(),[&](string a,string b){
return mp[a[0]]<mp[b[0]]||( mp[a[0]]==mp[b[0]]&&mp[a[2]]<mp[b[2]])||( mp[a[0]]==mp[b[0]]&&mp[a[2]]==mp[b[2]]&&mp[a[4]]<mp[b[4]]);
});
for(auto c:wtf)
{
cout<<c<<endl;
}
return 0;
} 第二题:双指针就行了
全部评论
(2) 回帖