Cod sursa(job #86069)

Utilizator CezarMocanCezar Mocan CezarMocan Data 23 septembrie 2007 14:36:27
Problema Curcubeu Scor 50
Compilator fpc Status done
Runda Autumn Warmup 2007, Runda 2 Marime 1.32 kb
var a,b,c:array[1..1000010]of int64;
    v:array[1..1000001]of boolean;
    x,z:array[1..1000001]of longint;
    i,j,a1,b1,c1,n,jo,s:longint;

function min(a,b:longint):longint;
begin
min:=a;
if b<min then
        min:=b;
end;

function max(a,b:longint):longint;
begin
max:=a;
if b>max then
        max:=b;
end;

begin
assign(input,'curcubeu.in');reset(input);
assign(output,'curcubeu.out');rewrite(output);
readln(n,a[1],b[1],c[1]);
//writeln('1 ',a[1],' ',b[1],' ',c[1]);
for i:=2 to n-1 do
        begin
        a[i]:=(a[i-1]*i)mod n;
        b[i]:=(b[i-1]*i)mod n;
        c[i]:=(c[i-1]*i)mod n;
//        writeln(i,' ',a[i],' ',b[i],' ',c[i]);
        end;
for i:=n-1 downto 1 do
        begin
        if not v[c[i]] then
                begin
                v[c[i]]:=true;
                jo:=min(a[i],b[i]);
                s:=max(a[i],b[i]);
                j:=jo;
                while (j<=s) do
                        begin
                        if x[j]=0 then
                                x[j]:=c[i];
                        if z[j]<>0 then
                                j:=z[j];
                        inc(j);
                        end;
                z[jo]:=s;
                end;
        end;
for i:=1 to n-1 do
        writeln(x[i]);
close(input);close(output);
end.