CON - Vòng tròn số

Tác giả: RR

Ngôn ngữ: Pascal

{$R+,Q+}
{$Mode objFPC}
uses math;
const
  FINP          =       '';
  FOUT          =       '';
  MAXN          =       100111;
var
  f1,f2         :       text;
  a,b           :       array[1..MAXN] of int64;
  n             :       longint;

procedure openF;
    begin
      assign(f1,FINP); reset(f1);
      assign(f2,FOUT); rewrite(f2);
    end;
procedure closeF;
    begin
      close(f1);
      close(f2);
    end;
procedure inp;
    var
      i:longint;
    begin
      read(f1,n);
      for i:=1 to n do
        read(f1,b[i]);
    end;
procedure solve0;
    var
      i:longint;
    begin
      a[1]:=0; a[2]:=0;
      for i:=3 to n do
        a[i]:=b[i-1]-a[i-2]-a[i-1];
    end;
procedure solve;
    var
      i,j,u,v:longint;
    begin
      i:=1; a[1]:=0;
      repeat
        j:=i; i:=i+3; if i>n then i-=n;
        u:=j+1; if u>n then u-=n;
        v:=j+2; if v>n then v-=n;
        a[i]:=a[j]+b[v]-b[u];
      until i=1;
      j:=(b[2]-a[1]-a[2]-a[3]) div 3;
      for i:=1 to n do
        a[i]+=j;
    end;
procedure ans;
    var
      i:longint;
    begin
      for i:=1 to n do
        write(f2,a[i],' ');
      writeln(f2);
    end;

begin
  openF;
  inp;
  if n mod 3=0 then solve0
  else solve;
  ans;
  closeF;
end.

Download