题意:给你一个n次方程,让你求他的所有根(重根也要输出)。
其实我一开始是蒙蔽的,不知道啥是重根,等我搞清楚什么是重根的时候别人已经开始打了。。
比如说(x-1)(x-1)(x-2)=0,这个方程的根是1 1 2
所以我们知道,如果一个n次方程能分解为(x-x1)(x-x2)(x-x3)….那么这个方程就可以解决了。
由于题目中规定ans<=20且都为整数,所以我们一个一个除,用多项式除法,依次除(x-1),(x-2)….但是因为有重根,每次都要除到只有一次项和常数,除了多少次就输出多少个。
代码(多项式除法现学现卖,打了超长时间,不然T3就有时间打了。。)
var
k,p,n,m:int64;
i,j:longint;
a,b:Array[0..10]of int64;
function chu(k:int64):boolean;
var
i:longint;
begin
for i:=0 to n do b[i]:=a[i];
for i:=n downto 1 do
begin
//writeln(i-1);
b[i-1]:=b[i-1]-(-k*b[i]);
end;
if b[0]=0 then exit(true)
else exit(false);
end;
begin
assign(input,'equation.in');
assign(output,'equation.out');
reset(input);
rewrite(output);
readln(n);
for i:=0 to n do read(a[i]);
m:=n;
k:=1;
i:=0;
while i<m do
begin
if chu(k) then//多项式除法
begin
for j:=0 to n do b[j]:=a[j];
dec(n);
for j:=n downto 0 do
begin
a[j]:=b[j+1];
b[j]:=b[j]-(-k*b[j+1]);
end;
write(k,' ');
end
else
begin
inc(k);
dec(i);
end;
inc(i);
end;
end.