fork download
  1. Program walrus;
  2. var
  3. N, S, T, W, test,i, 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=1 then tempo:=1
  10. else if B=2 then tempo:=2
  11. else
  12. begin
  13. if B mod 2<>0 then tempo := (B-3) div 2 +2
  14. else tempo:= (B-3) div 2 +3;
  15. end;
  16. end;
  17.  
  18.  
  19. begin
  20. (*assign(input, 'input.txt'); reset(input);
  21.   assign(output, 'output.txt'); rewrite(output);*)
  22. ReadLn(T);
  23. for test:=1 to T do begin
  24. ReadLn(N);
  25. ReadLn(C);
  26. W := 0;
  27. S := 0;
  28. singolo:=0;
  29. blocco:=0;
  30. totdormienti:=0;
  31. if N=1 then begin W:=1; S:=1; end
  32. else begin
  33. i:=1;
  34. while i<N do
  35. begin
  36. if C[i]='-' then i:=i+1
  37. else
  38. 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
  39. else begin i:=i+1; totdormienti:=totdormienti+1; end
  40. end
  41. else
  42. 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
  43. else
  44. if (C[i]='.') and (C[i+1]='-') then begin i:=i+1; blocco:=blocco+1;totdormienti:=totdormienti+1;branco[blocco]:=totdormienti; i:=i+1; totdormienti:=0; end;
  45. end;
  46. for i:=1 to blocco do calcolatempo(branco[i],tempobranco[i]);
  47. W:=blocco;
  48. if blocco=1 then S:=tempobranco[1]
  49. else if singolo=0 then S:=blocco+1
  50. else S:=blocco;
  51. end;
  52. WriteLn(W, ' ', S);
  53. end;
  54. end.
  55.  
  56.  
Success #stdin #stdout 0s 5276KB
stdin
1
1
.
stdout
1 1