Cod sursa(job #250138)

Utilizator chelaru_t_achelaru traian andrei chelaru_t_a Data 30 ianuarie 2009 11:22:57
Problema Eprubeta Scor 2
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.38 kb
var n,m,k,a,b,i,j,op:integer;
    q:array [0..2000,0..2000] of longint;
    z:longint;
    f,g:text;

 procedure citire;
  var i,j:integer;
  begin
   readln(f,n,m,z,a,b);
   for i:=0 to n do
     for j:=0 to n do q[i,j]:=((a+j)*(i+b) div 4) mod z;
  end;

 procedure op1(i,j:integer);
  var x,y,y1:integer;
      aux:longint;
  begin
   for x:=i to j div 2 do
     begin
     y1:=j+1;
     for y:=i to j do
       begin
       y1:=y1-1;
       aux:=q[x,y];
       q[x,y]:=q[j+1-x,y1];
       q[j+1-x,y1]:=aux;
       end;
     end;
   if j mod 2=1 then
     for y:=i to j div 2 do
       begin
       aux:=q[j div 2+1,y];
       q[j div 2+1,y]:=q[j div 2+1,j+1-y];
       q[j div 2+1,j+1-y]:=aux;
       end;
  end;

 procedure op2(i,j:integer);
  var x,y:integer;
      s:longint;
  begin
   s:=0;
   for x:=i to j do
     for y:=i to j do s:=s+q[x,y];
   writeln(g,s);
  end;

 procedure tmod;
  var t,s:int64;
      i,j:integer;
  begin
   t:=0;
   for i:=1 to n do
     begin
     s:=0;
     for j:=1 to n do s:=s+q[i,j];
     t:=t+(s*s*(i+1));
     end;
   writeln(g,t mod 4294967296);
  end;

begin
  assign(f,'eprubeta.in');
  assign(g,'eprubeta.out');
  reset(f);
  rewrite(g);
  citire;
  for k:=1 to m do
    begin
    readln(f,op,i,j);
    if op=1 then op1(i,j)
    else op2(i,j);
    end;
  tmod;
  close(f);
  close(g);
end.