Listing PARITATE.PAS Program parity; const ni='parity.in'; no='parity.out'; nmax=5000; type cell=record s,f:Longint; p:Byte; end; var f:Text; aux:cell; a:array [1..nmax] of cell; n,pas,i,start,finish,l,k:Longint; vali:string; procedure stop(m:longint); begin Close(f); Assign(f,no); Rewrite(f); Writeln(f,m); Close(f); Halt end; procedure work; begin for i:=1 to length(vali) do vali[i]:=upcase(vali[i]); l:=l+1; a[l].s:=start; a[l].f:=finish; if pos('EVEN',vali)>0 then a[l].p:=0 else a[l].p:=1; k:=l-1; while (k>0) and (a[k].s>=a[l].s) do k:=k-1; k:=k+1; while (k<l) and (a[k].s=a[l].s) do begin if a[k].f>a[l].f then begin aux:=a[k]; a[k]:=a[l]; a[l]:=aux end; if a[k].f=a[l].f then begin if a[k].p<>a[l].p then stop(pas-1); l:=l-1; k:=l end; if a[k].f<a[l].f then begin a[l].s:=a[k].f+1; a[l].p:=abs(a[l].p-a[k].p) end; while (k<l) and (a[k].s<a[l].s) do k:=k+1 end; while k<l do begin aux:=a[k]; a[k]:=a[l]; a[l]:=aux; k:=k+1 end end; procedure load; begin l:=0; Assign(f,ni);reset(f); Readln(f); Readln(f,n); for pas:=1 to n do begin Read(f,start,finish); Readln(f,vali); work end; Close(f); stop(n) end; Begin load End. [cuprins] |