回复 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");
}