UVa 941 - Permutations Solution

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> facto(long long int n){
    vector<int> ans;
    int i=1;
    while(n){
        ans.push_back(n%i);
        n/=i;
        i++;
    }
    reverse(ans.begin(),ans.end());
    return ans;
}
int main(){
    long long int n;
    int t;
    string s;
    cin>>t;
    while(t--){
        cin>>s>>n;
        sort(s.begin(),s.end());
        vector<int> ord=facto(n);
        reverse(ord.begin(),ord.end());
        int j=s.size()-ord.size();
        for(int i=0;i<j;i++)
            ord.push_back(0);
        reverse(ord.begin(),ord.end());
        for(int i=0;i<ord.size();i++){
            cout<<s[ord[i]];
            s.erase(ord[i],1);
        }
        cout<<endl;
    }
}

Comments