10548 - Find the Right Changes
Posted: Wed Aug 27, 2003 6:45 pm
Can anybody tell me how can I improve my algo. I get AC.
I do brute froce with some improvements, but they are not enough.
My Code:
[pascal]Program p10548;
type LongInt = Int64;
Var a, b, c, n, t, beg : LongInt;
i, j : Integer;
function gcd(a, b : LongInt) : LongInt;
begin
if a = 0 then gcd := b else gcd := gcd(b mod a, a);
end;
begin
read(n);
for i := 1 to n do begin
read(a, b, c);
if a > b then begin
t := a;
a := b;
b := t;
end;
if a < 0 then begin
t := 0;
beg := c div b;
if b * beg < c then beg := beg + 1;
for j := beg to beg - a do
(* CUT CUT CUT CUT CUT CUT CUT *)
if t = 0 then Writeln('Impossible')
else Writeln('Infinitely many solutions');
end else begin
t := 0;
for j := 0 to a div gcd(a, b) do
(* CUT CUT CUT CUT CUT CUT CUT *)
if t = 0 then Writeln('Impossible')
else Writeln(t);
end;
end;
end.[/pascal]
I do brute froce with some improvements, but they are not enough.
My Code:
[pascal]Program p10548;
type LongInt = Int64;
Var a, b, c, n, t, beg : LongInt;
i, j : Integer;
function gcd(a, b : LongInt) : LongInt;
begin
if a = 0 then gcd := b else gcd := gcd(b mod a, a);
end;
begin
read(n);
for i := 1 to n do begin
read(a, b, c);
if a > b then begin
t := a;
a := b;
b := t;
end;
if a < 0 then begin
t := 0;
beg := c div b;
if b * beg < c then beg := beg + 1;
for j := beg to beg - a do
(* CUT CUT CUT CUT CUT CUT CUT *)
if t = 0 then Writeln('Impossible')
else Writeln('Infinitely many solutions');
end else begin
t := 0;
for j := 0 to a div gcd(a, b) do
(* CUT CUT CUT CUT CUT CUT CUT *)
if t = 0 then Writeln('Impossible')
else Writeln(t);
end;
end;
end.[/pascal]