1 #include <bits/stdc++.h> 2 using namespace std; 3 #define _for(i,a,b) for(int i = (a);i < b;i ++) 4 const int maxn = 10009; 5 typedef long long ll; 6 int N,M; 7 int a[maxn]; 8 inline ll read() 9 { 10 ll ans = 0; 11 char ch = getchar(), last = ' '; 12 while(!isdigit(ch)) last = ch, ch = getchar(); 13 while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar(); 14 if(last == '-') ans = -ans; 15 return ans; 16 } 17 inline void write(ll x) 18 { 19 if(x < 0) x = -x, putchar('-'); 20 if(x >= 10) write(x / 10); 21 putchar(x % 10 + '0'); 22 } 23 24 int main() 25 { 26 N = read(),M = read(); 27 _for(i,0,N) 28 a[i] = read(); 29 do 30 { 31 if(M==0) 32 break; 33 M --; 34 }while(next_permutation(a,a+N)); 35 _for(i,0,N) 36 { 37 write(a[i]); 38 if(i!=N-1) 39 printf(" "); 40 } 41 return 0; 42 }
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define _for(i,a,b) for(int i = (a);i < b;i ++) 5 typedef long long ll; 6 using namespace std; 7 ll a[10003]; 8 ll rnt[10003]; 9 int vis[10003]; 10 int m,n; 11 inline ll read() 12 { 13 ll ans = 0; 14 char ch = getchar(), last = ' '; 15 while(!isdigit(ch)) last = ch, ch = getchar(); 16 while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar(); 17 if(last == '-') ans = -ans; 18 return ans; 19 } 20 inline void write(ll x) 21 { 22 if(x < 0) x = -x, putchar('-'); 23 if(x >= 10) write(x / 10); 24 putchar(x % 10 + '0'); 25 } 26 int main() 27 { 28 n = read(),m = read(); 29 ll res = 0; 30 _for(i,0,n) 31 a[i] = read(); 32 33 _for(i,0,n) 34 { 35 ll tsum = 0; 36 _for(j,0,i+1) 37 if(a[j] <= a[i]) 38 tsum ++; 39 rnt[i] = a[i]-tsum; 40 } 41 rnt[n-1] += m; 42 for(int i = n-1;i > 0;i--) 43 { 44 rnt[i-1] += rnt[i]/(n-i); 45 rnt[i] %= n-i; 46 } 47 48 memset(vis,0,sizeof(vis)); 49 _for(i,0,n) 50 { 51 rnt[i] ++; 52 int j; 53 for(j = 1;j <= n;j ++) 54 { 55 if(vis[j]) 56 continue; 57 rnt[i] --; 58 if(!rnt[i]) 59 break; 60 } 61 vis[j] = 1; 62 printf("%d ",j); 63 } 64 return 0; 65 }