| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
哪位仁兄帮忙看哈到底哪里有问题,挂得不行了算法:
题目要求就是求出置换群最大周期,可以转化成为这样的问题:
求X个自然数和为N,使其积最大.然后得到的X个数为一个内循环数,
再按字典序生成目标置换.
代码:
#include <stdio.h>
#include <math.h>
int main(void)
{
int t,n,i,j,k,x,m,sign,tt;
double sum,max,y;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
max=n;
x=n;
tt=0;
for(i=1;i<=n;i++)
{
if(n%i==0)
{
sign=0;
sum=pow(i,n/i);
}
else if(n%i==1)
{
sign=0;
sum=pow(i,n/i-1)*(i+n%i);
}
else
{
sum=pow(i,n/i)*(n%i);
y=pow(i,n/i-1)*(i+n%i);
if(sum>=y)
sign=1;
else
{
sign=0;
sum=y;
}
}
if(sum>max)
{
max=sum;
x=i;
tt=sign;
}
}
printf("%.0lf ",max);
if(tt==1)
{
for(j=1;j<x-1;j++)
printf("%d ",j+1);
printf("1 ");
i=n%x+1;
}
else
i=1;
for(;i<n-x;i+=x)
{
for(j=i;j<i+x-1;j++)
printf("%d ",j+1);
printf("%d ",i);
}
for(j=i;j<n;j++)
printf("%d ",j+1);
printf("%d",i);
printf("\n");
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator