fork(1) download
  1. Var M,N: longint;
  2. S: ansistring;
  3. R,A,F,luu: Array[0..150000] of longint;
  4.  
  5. Function max(a,b: longint): longint;
  6. begin
  7. max:=a;
  8. if b>max then max:=b;
  9. end;
  10.  
  11. Function min(a,b: longint): longint;
  12. begin
  13. min:=a;
  14. if b<min then min:=b;
  15. end;
  16.  
  17.  
  18. Function xuli(i: longint): longint;
  19. var bd,dem: longint;
  20. begin
  21. bd:=0;
  22. dem:=0;
  23. While bd<=m do
  24. begin
  25. bd:=bd+i;
  26. inc(dem);
  27. While S[bd]='1' do dec(bd);
  28. end;
  29. exit(dem);
  30. end;
  31.  
  32.  
  33. Procedure Enter;
  34. var i,j: longint;
  35. max1,min1: longint;
  36. begin
  37. Readln(N,M);
  38. max1:=0; min1:=100000000;
  39. for i:=1 to N do
  40. begin
  41. read(R[i]);
  42. max1:=max(max1,R[i]);
  43. min1:=min(min1,R[i]);
  44. end;
  45. Readln;
  46. Read(S);
  47. For i:=1 to 101 do S:=S+'';
  48. for i:=min1 to max1 do luu[i]:=xuli(i);
  49. for i:=1 to n do A[i]:=luu[R[i]];
  50. end;
  51.  
  52.  
  53.  
  54. Procedure Sort(L,h: longint);
  55. var key,t,i,j: longint;
  56. begin
  57. if L>=H then EXIT;
  58. key:=A[random(H-L+1)+L];
  59. i:=L; j:=H;
  60. repeat
  61. While A[i]<key do inc(i);
  62. While A[j]>key do dec(j);
  63. if i<=j then
  64. begin
  65. if i<j then begin t:=A[i];A[i]:=A[j];A[j]:=t end;
  66. inc(i); dec(j);
  67. end;
  68. until i>j;
  69. Sort(L,j); Sort(i,H);
  70.  
  71. end;
  72.  
  73. Procedure Process;
  74. var i,j: longint;
  75. begin
  76. F[0]:=0; F[1]:=A[1]; F[2]:=A[2];
  77. For i:=3 to N do
  78. F[i]:=min(F[i-1]+A[i]+A[1], F[i-2]+A[1]+2*A[2]+A[i]);
  79. Write(F[n]);
  80. end;
  81.  
  82. begin
  83. Enter;
  84. Sort(1,N);
  85. Process;
  86. end.
Success #stdin #stdout 0s 2576KB
stdin
Standard input is empty
stdout
Standard output is empty