回复 20楼 草狼
不要高精度?求围观
回复 19楼 czz5242199
你可以用这组数据来测1
19 12164510040883199
1 3 9 11 5 6 7 8 10 2 19 12 4 17 13 14 15 16 18
看你的程序多久后输出大答案
#include <stdio.h> int main() { int a[20]={1,3,9,11,5,6,7,8,10,2,19,12,4,17,13,14,15,16,18},n=19,i,j,k; long long m=12164510040883199,p; // scanf("%d%ld",&n,&m); // for (i=0; i<n; i++) scanf("%d",&a[i]); p=1; for (i=1; i<n; i++) p*=i; m%=(p*n); for (j=n-1; j>=1; j--) { while (m>=p) //这个循环每次最多允许n次 { k=n-j-1; m-=p; for (i=k+1; i<n; i++) if (a[i]==a[k]+1) { a[k]++; a[i]--; break; } } p/=j; } for (i=0; i<n; i++) printf("%d ",a[i]); printf("\n"); system("pause"); }