1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
program hazard;//runda 3-B                         30.09.2015
const nmax=1000000;
type Ti=longint;
function Euclid(m,n:Ti):Ti;
  begin if n=0 then Euclid:=m
    else Euclid:=Euclid(n,m mod n)
  end; //Euclid
var i,j,io,ja,ausum:Ti;//suma wyplat w jednym cyklu
  n,m,NWD,lgier:qword;
  ch: char;
  koniec:boolean;
  so,sopocz: array[1..nmax] of Ti; //sumy oszczęd aktualne i pocz
  au: array[1..nmax] of Ti; //wyniki automatu: W lub P

begin
  readln(n);
  for i:=1 to n do read(so[i]);
  sopocz:=so; ausum:=0;
  readln(m); NWD:=Euclid(n,m);
  for j:=1 to m do
  begin read(ch);
    if ch='W' then au[j]:=1 else au[j]:=-1;
    ausum+=au[j]
  end;//j

  io:=0; ja:=0; lgier:=0; //init liczniki
 repeat
  for i:=1 to n div NWD do
  for j:=1 to m do
  begin Inc(lgier); Inc(io); Inc(ja); so[io]+=au[ja];
    if so[io]=0 then begin writeln(lgier); exit end;
    if io=n then io:=0; if ja=m then ja:=0
  end;//j,i

  koniec:=true; //spr, czy koniec 
  for i:=1 to n do  koniec:=koniec and (so[i]-sopocz[i]>=0); 
  if koniec then begin writeln(-1); exit end;
 until false;
end.