第一题
#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) 回帖