fork download
  1. program walrus;
  2. var
  3. N, S, T, W, test,i,h, singolo, blocco, totdormienti: LongInt;
  4. C : AnsiString;
  5. branco, tempobranco: array[1..300000] of longint;
  6.  
  7. Procedure calcolatempo (B:longint; var tempo:longint) ;
  8. begin
  9. if B mod 2 <>0 then tempo := (B-3) div 2 +2
  10. else tempo:= (B-3) div 2 +3;
  11. end;
  12.  
  13. begin
  14. (*assign(input, 'input.txt'); reset(input);
  15.   assign(output, 'output.txt'); rewrite(output);*)
  16. ReadLn(T);
  17. for test:=1 to T do begin
  18. ReadLn(N);
  19. ReadLn(C);
  20. W := 0;
  21. S := 0;
  22. singolo:=0;
  23. blocco:=0;
  24. totdormienti:=0;
  25. i:=1;
  26. while i<N do
  27. begin
  28. h:=0;
  29. if C[i]='-' then i:=i+1
  30. else
  31. if (C[i]='.') and (C[i+1]='.') then begin if i=N-1 then begin blocco:=blocco+1; totdormienti:=totdormienti+2;branco[blocco]:=totdormienti; i:=i+1; end
  32. else begin i:=i+1; totdormienti:=totdormienti+1; end
  33. end
  34. else
  35. if (C[i]='.') and (C[i-1]='-') and (C[i+1]='-') then begin singolo:=singolo+1; blocco:=blocco+1; totdormienti:=totdormienti+1;branco[blocco]:=totdormienti; i:=i+1; totdormienti:=0; end
  36. else
  37. if (C[i]='.') and (C[i+1]='-') then begin blocco:=blocco+1;totdormienti:=totdormienti+1; branco[blocco]:=totdormienti; i:=i+1; totdormienti:=0; end;
  38. end;
  39. for i:=1 to blocco do write(branco[i],' ') ; writeln;
  40. for i:=1 to blocco do calcolatempo(branco[i], tempobranco[i]);
  41. for i:=1 to blocco do write(tempobranco[i],' ') ; writeln;
  42. W:=blocco;
  43. if singolo=0 then S:=W+1
  44. else S:=W;
  45. WriteLn(W, ' ', S);
  46. end;
  47. end.
  48.  
  49.  
Success #stdin #stdout 0s 5276KB
stdin
1
3
.-.
stdout
1 
1 
1 2