\(STL\)當然好,但記不住的人(好比我這種cb),就用了其餘解法ide
進制數idea
連接spa
咱們如何思考呢?code
對於第\(i\)根手指,有\(n-i+1\)種選擇,因而這一位數是\(n-i+1\)進制的blog
咱們的過程分爲三步get
咱們舉個栗子:樣例io
將1,2,3,4,5變爲進制數class
其中對於每一位,都是\(n-i+1\)進制的數。im
因而,\((00000)_{unknown}+3=(00110)_{unknown}\)next
(寫的很醜,請不要在乎)
再轉化回來
因此,代碼獻上。也包括next_permutation
的寫法
int a[maxn]; bool vis[maxn]; int n,m; int main(){ n=read(); m=read(); for(int i=1;i<=n;i++){ a[i]=read(); int x=a[i]; for(int j=1;j<=a[i];j++) x-=vis[j]; vis[a[i]]=1; a[i]=x-1; } a[n]+=m; for(int i=n;i;i--){ a[i-1]+=a[i]/(n-i+1); a[i]%=n-i+1; } mem(vis,0); for(int i=1;i<=n;i++){ for(int j=0;j<=a[i];j++) if(vis[j]) a[i]++; printf("%d ",a[i]+1); vis[a[i]]=1; } return 0; }
int a[maxn]; int main(){ int n=read(),m=read(); for(int i=1;i<=n;i++) a[i]=read(); while(m--) next_permutation(a+1,a+n+1); for(int i=1;i<n;i++) printf("%d ",a[i]); printf("%d\n",a[n]); return 0; }
\[ The \quad End \]
\[ \text{若男孩笑了哭了累了,說要去流浪;留下大人的模樣,看歲月劍拔弩張.總會有我的成爲你的遠方。-《牧馬城市》毛不易} \]