10pts求调(玄关
查看原帖
10pts求调(玄关
1179906
hhy8399楼主2025/2/7 00:18
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1e6 + 10;

int n,m,cnt,k,pos,j,a[MAXN],b[MAXN],c[MAXN];
map<int,int> mp;

int main() {
    //读入
    cin >> n >> m;
    for(int i = 1;i <= n;i++) {
        cin >> a[i];
    }
    //打表:打出所有顺序
    do {
        cnt ++;
        for(int i = 1,j = n - 1;i <= n;i++,j --) {
            b[cnt] += a[i] * pow(10,j);
        }
    }while(next_permutation(a + 1,a + n + 1));
    //排序
    sort(b + 1,b + cnt + 1);
    //将手指顺序转换成数
    for(int i = 1,j = n - 1;i <= n;i++,j --) {
        k += a[i] * pow(10,j);
    }
    //用map映射
    for(int i = 1;i <= cnt;i ++) {
        mp[i] = b[i];
        if(b[i] == k) {
            pos = i;
        }
    }
    //找到加m以后的数
    int w = mp[pos + m];
    //倒序放入
    while(w) {
        j++;
        c[j] = w % 10;
        w /= 10;
    }
    //再一次倒序,输出
    for(int i = j;i >= 1;i --) {
        cout << c[i] << " ";
    }
    return 0;
}
2025/2/7 00:18
加载中...