ACM 10326 Q10326: The Polynomial Equation (未完成版)
題目 給你方程式的根
請輸出原本的方程式... 可惜我TLE了
生成根與係數太慢了
/**********************************************************/
#include<stdio.h>
#include<stdlib.h>
int way[101]={0},value[101];
int n,m;
long long int w[101];
void make (int now,int a,int n,int m,long long int s)
{
int b=a,c;
w[now-1]+=s;
if(now==m+1) return;
for(b=a;b<=n;b++)
{
way[now]=value[b];
make(now+1,b+1,n,m,s*way[now]);
}
}
main()
{
while(scanf("%d",&n)==1)
{
int a,b,c;
for(a=1;a<=n;a++)
{
scanf("%d",&value[a]);
w[a]=0;
}
w[0]=0;
make(1,1,n,n,1);
if(n!=1)
printf("x^%d ",n);
else printf("x ");
for(a=1;a<=n-1;a++)
{
if(a%2==1) w[a]*=-1;
if(w[a]<0)
{
if(n-a!=1)
{
if(w[a]!=-1)
printf("- %I64dx^%d ",-w[a],n-a);
else printf("- x^%d ",n-a);
}
else
{
if(w[a]!=-1)
printf("- %I64dx ",-w[a]);
else printf("- x ");
}
}
else if(w[a]>0)
{
if(n-a!=1)
{
if(w[a]!=1)
printf("+ %I64dx^%d ",w[a],n-a);
else printf("+ x^%d ",n-a);
}
else
{
if(w[a]!=1)
printf("+ %I64d ",w[a]);
else printf("+ x ");
}
}
}
if(n%2==1) w[n]*=-1;
if(w[n]>=0)
printf("+ %I64d ",w[n]);
else
printf("- %I64d ",-w[n]);
printf("= 0\n");
}
return 0;
}