Cod sursa(job #1391441)

Utilizator mariusadamMarius Adam mariusadam Data 17 martie 2015 22:42:30
Problema Evaluarea unei expresii Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.77 kb
program siruri;
var     v:array[1..1000001] of char;
        nr:array[1..100001] of longint;
        used:array[1..100001] of 0..1;
        n,p:longint;

procedure citire;
var     i:longint;
        f:text;
begin
 assign(f,'siruri.in'); reset(f);
 readln(f,p);
 readln(f,n);
 for i:=1 to n do
        read(f,v[i]);
 close(f);
end;

procedure scrie(x:longint);
var g:text;
begin
 assign(g,'siruri.out'); rewrite(g);
 writeln(g,x);
 close(g);
end;

procedure sol1;
var     i,j,nrs,st,sf,prec:longint;
        max,val,min:char;
begin
 nr[n]:=1;
 max:=v[n];
 for i:=n-1 downto 1 do begin
        if v[i]>max then begin
                max:=v[i];
                nr[i]:=1;
        end
        else begin
                val:='{';
                for j:=i+1 to n do
                        if (v[i]<=v[j]) and (v[j]<=val) then begin
                                val:=v[j];
                                nr[i]:=(nr[i]+nr[j]) mod 41357;
                        end
        end
 end;
 nrs:=nr[1]; min:='{';
 for i:=2  to n do
  if min>v[i] then begin
        min:=v[i];
        nrs:=(nrs+nr[i]) mod 41357;
  end;
 scrie(nrs);
end;

procedure sol2;
var i,j,st,nrp:longint;
begin
 nrp:=0;
 for i:=1 to n-1 do
        if used[i]=0 then begin
                used[i]:=1;
                st:=i;
                write(v[i],' ');
                for j:=i+1 to n do
                        if (v[st]<=v[j])and(used[j]=0) then begin
                                st:=j;
                                used[j]:=1;
                                write(v[j],' ');
                        end;
                writeln;
                nrp:=nrp+1;
        end;
 scrie(nrp);
end;

begin
 citire;
 if p=1 then
        sol1
 else
        sol2;
end.