Cod sursa(job #118508)
Utilizator | Data | 26 decembrie 2007 14:14:48 | |
---|---|---|---|
Problema | Ecuatie | Scor | 0 |
Compilator | fpc | Status | done |
Runda | Arhiva de probleme | Marime | 13.25 kb |
Program ecuatie;{pre ONI 2008 runda1}
label 1,2;
type
elem=record
p1,q1,p2,q2:longint;
end;
var f,g:text;
a,b,c,p1,p2,q1,q2,k,delta,i,n,d,ok,d1,m:longint;
x1,x2,y1,y2:real;
s:array[1..3] of elem;
o:array[1..10000] of longint;
x:elem;
begin
assign(f,'ecuatie.in');reset(f);
assign(g,'ecuatie.out');rewrite(g);
read(f,a,b,c,k);
n:=0;
delta:=b*b-4*a*c;
if delta <0 then begin writeln(g,-1); goto 1;end
else if sqrt(delta)<>trunc(sqrt(delta))
then begin writeln(g,-1); goto 1;end;
x1:=(-b+sqrt(delta))/(2*a);
x2:=(-b-sqrt(delta))/(2*a);
{generam div negativi}
m:=0;
for d:=1 to trunc(sqrt(a)) do
if a mod d=0 then begin
m:=m+1;o[m]:=d;
d1:=a div d;d1:=-d1;
p1:=d1;p2:=a div d1;
y1:=-x1*d1;y2:=-x2*p2;
if( trunc(y1)=y1) and (trunc(y2)=y2) then
begin
q1:=trunc(y1);q2:=trunc(y2);
n:=n+1;
if n+1 =k then begin s[1].p1:=p1;s[1].q1:=q1;
s[1].p2:=p2;s[1].q2:=q2
end
else if n =k then begin
s[2].p1:=p1;s[2].q1:=q1;
s[2].p2:=p2;s[2].q2:=q2;
if s[1].p1 =s[2].p1 then
if s[1].q1>s[2].q1 then begin
x:=s[1];s[1]:=s[2];s[2]:=x; end;
end
else
if n=k+1 then begin
s[3].p1:=p1;s[3].q1:=q1;
s[3].p2:=p2;s[3].q2:=q2;
if s[2].p1 =s[3].p1 then
if s[2].q1>s[3].q1 then begin
x:=s[2];s[2]:=s[3];s[3]:=x; end;
end
end;
p1:=d1;p2:=a div d1;
y1:=-x2*d1;y2:=-x1*p2;
if( trunc(y1)=y1) and (trunc(y2)=y2) then
begin
q1:=trunc(y1);q2:=trunc(y2);
n:=n+1;
if n+1 =k then begin s[1].p1:=p1;s[1].q1:=q1;
s[1].p2:=p2;s[1].q2:=q2
end
else if n =k then begin
s[2].p1:=p1;s[2].q1:=q1;
s[2].p2:=p2;s[2].q2:=q2;
if s[1].p1 =s[2].p1 then
if s[1].q1>s[2].q1 then begin
x:=s[1];s[1]:=s[2];s[2]:=x; end;
end
else
if n=k+1 then begin
s[3].p1:=p1;s[3].q1:=q1;
s[3].p2:=p2;s[3].q2:=q2;
if s[2].p1 =s[3].p1 then
if s[2].q1>s[3].q1 then begin
x:=s[2];s[2]:=s[3];s[3]:=x; end;
end
else
if n=k+1 then begin
s[3].p1:=p1;s[3].q1:=q1;
s[3].p2:=p2;s[3].q2:=q2;
if s[2].p1 =s[3].p1 then
if s[2].q1>s[3].q1 then begin
x:=s[2];s[2]:=s[3];s[3]:=x; end;
end
end;
end;
if trunc(sqrt(a))=sqrt(a) then m:=m-1;
for i:=m downto 1 do
begin
d1:=-o[i];
p1:=d1;p2:=a div d1;
y1:=-x1*d1;y2:=-x2*p2;
if( trunc(y1)=y1) and (trunc(y2)=y2) then
begin
q1:=trunc(y1);q2:=trunc(y2);
n:=n+1;
if n+1 =k then begin s[1].p1:=p1;s[1].q1:=q1;
s[1].p2:=p2;s[1].q2:=q2
end
else if n =k then begin
s[2].p1:=p1;s[2].q1:=q1;
s[2].p2:=p2;s[2].q2:=q2
end
else
if n=k+1 then begin
s[3].p1:=p1;s[3].q1:=q1;
s[3].p2:=p2;s[3].q2:=q2;
if s[2].p1 =s[3].p1 then
if s[2].q1>s[3].q1 then begin
x:=s[2];s[2]:=s[3];s[3]:=x; end;
end
end;
p1:=d1;p2:=a div d1;
y1:=-x2*d1;y2:=-x1*p2;
if( trunc(y1)=y1) and (trunc(y2)=y2) then
begin
q1:=trunc(y1);q2:=trunc(y2);
n:=n+1;
if n =k-1 then begin s[1].p1:=p1;s[1].q1:=q1;
s[1].p2:=p2;s[1].q2:=q2
end
else if n =k then begin
s[2].p1:=p1;s[2].q1:=q1;
s[2].p2:=p2;s[2].q2:=q2;
if s[1].p1 =s[2].p1 then
if s[1].q1>s[2].q1 then begin
x:=s[1];s[1]:=s[2];s[2]:=x end
end
else
if n=k+1 then begin
s[3].p1:=p1;s[3].q1:=q1;
s[3].p2:=p2;s[3].q2:=q2;
if s[2].p1 =s[3].p1 then
if s[2].q1>s[3].q1 then begin
x:=s[2];s[2]:=s[3];s[3]:=x; end;
end
end;
end;
for i:=1 to m do
begin
d1:=o[i];
p1:=d1;p2:=a div d1;
y1:=-x1*d1;y2:=-x2*p2;
if( trunc(y1)=y1) and (trunc(y2)=y2) then
begin
q1:=trunc(y1);q2:=trunc(y2);
n:=n+1;
if n+1 =k then begin s[1].p1:=p1;s[1].q1:=q1;
s[1].p2:=p2;s[1].q2:=q2
end
else if n =k then begin
s[2].p1:=p1;s[2].q1:=q1;
s[2].p2:=p2;s[2].q2:=q2
end
else
if n=k+1 then begin
s[3].p1:=p1;s[3].q1:=q1;
s[3].p2:=p2;s[3].q2:=q2;
if s[2].p1 =s[3].p1 then
if s[2].q1>s[3].q1 then begin
x:=s[2];s[2]:=s[3];s[3]:=x; end;
end
end;
p1:=d1;p2:=a div d1;
y1:=-x2*d1;y2:=-x1*p2;
if( trunc(y1)=y1) and (trunc(y2)=y2) then
begin
q1:=trunc(y1);q2:=trunc(y2);
n:=n+1;
if n =k-1 then begin s[1].p1:=p1;s[1].q1:=q1;
s[1].p2:=p2;s[1].q2:=q2
end
else if n =k then begin
s[2].p1:=p1;s[2].q1:=q1;
s[2].p2:=p2;s[2].q2:=q2;
if s[1].p1 =s[2].p1 then
if s[1].q1>s[2].q1 then begin
x:=s[1];s[1]:=s[2];s[2]:=x end
end
else
if n=k+1 then begin
s[3].p1:=p1;s[3].q1:=q1;
s[3].p2:=p2;s[3].q2:=q2;
if s[2].p1 =s[3].p1 then
if s[2].q1>s[3].q1 then begin
x:=s[2];s[2]:=s[3];s[3]:=x; end;
end
end;
end;
if trunc(sqrt(a))=sqrt(a) then m:=m+1;
for i:=m downto 1 do
begin
d1:=a div o[i];
p1:=d1;p2:=a div d1;
y1:=-x1*d1;y2:=-x2*p2;
if( trunc(y1)=y1) and (trunc(y2)=y2) then
begin
q1:=trunc(y1);q2:=trunc(y2);
n:=n+1;
if n+1 =k then begin s[1].p1:=p1;s[1].q1:=q1;
s[1].p2:=p2;s[1].q2:=q2
end
else if n =k then begin
s[2].p1:=p1;s[2].q1:=q1;
s[2].p2:=p2;s[2].q2:=q2
end
else
if n=k+1 then begin
s[3].p1:=p1;s[3].q1:=q1;
s[3].p2:=p2;s[3].q2:=q2;
if s[2].p1 =s[3].p1 then
if s[2].q1>s[3].q1 then begin
x:=s[2];s[2]:=s[3];s[3]:=x; end;
end
end;
p1:=d1;p2:=a div d1;
y1:=-x2*d1;y2:=-x1*p2;
if( trunc(y1)=y1) and (trunc(y2)=y2) then
begin
q1:=trunc(y1);q2:=trunc(y2);
n:=n+1;
if n =k-1 then begin s[1].p1:=p1;s[1].q1:=q1;
s[1].p2:=p2;s[1].q2:=q2
end
else if n =k then begin
s[2].p1:=p1;s[2].q1:=q1;
s[2].p2:=p2;s[2].q2:=q2;
if s[1].p1 =s[2].p1 then
if s[1].q1>s[2].q1 then begin
x:=s[1];s[1]:=s[2];s[2]:=x end
end
else
if n=k+1 then begin
s[3].p1:=p1;s[3].q1:=q1;
s[3].p2:=p2;s[3].q2:=q2;
if s[2].p1 =s[3].p1 then
if s[2].q1>s[3].q1 then begin
x:=s[2];s[2]:=s[3];s[3]:=x; end;
end
end;
end;
2:if n<k then writeln(g,-1)
else begin
write(g,'(');
if (s[2].p1 <>1) and (s[2].p1<>-1) then write(g,s[2].p1);
if s[2].p1=-1 then write(g,'-');
write(g,'x');
if s[2].q1>0 then write(g,'+');
write(g,s[2].q1,') (');
if (s[2].p2 <>1) and (s[2].p2<>-1) then write(g,s[2].p2);
if s[2].p2=-1 then write(g,'-');
write(g,'x');
if s[2].q2>0 then write(g,'+');
write(g, s[2].q2,')');
end; ;
1:close(f); close(g);
end.