Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2020
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.94 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #define N 1000001
  4. using namespace std;
  5. ifstream fin("secvp.in");
  6. ofstream fout("secvp.out");
  7.  
  8. int n, lg, v[100001]; ///datele de intrare
  9. bool c[N]; ///ciurul
  10. int p[100001], k; ///nr prime
  11. int a[100001]; ///nr de increm sau decrem pt fiecare nr de pe poz i
  12. int pasi; ///nr de pasi total
  13.  
  14. void Ciur()
  15. {
  16. int i,j;
  17. /// 0 - nu e prim , 1 - e prim
  18. c[2] = 1;
  19. for(i = 3; i <= N; i+=2)
  20. c[i] = 1;
  21. for(i=3; i <= N; i+=2)
  22. if(c[i]==1)
  23. {
  24. p[++k] = i; ///in p pastram toate nr prime
  25. for(j = 2*i; j<=N; j += i)
  26. c[j] = 0;
  27. }
  28. }
  29.  
  30. int CB(int x)
  31. {
  32. int st, dr, m;
  33. st = 1;
  34. dr = k;
  35. while(st < dr)
  36. {
  37. m = (st+dr) / 2;
  38. if(p[m] == x)
  39. return m;
  40. else if(x < p[m])
  41. dr = m-1;
  42. else st = m+1;
  43. }
  44.  
  45. if(p[dr]<=x && p[dr+1]>x)
  46. return dr+1;
  47. if(p[dr-1]<=x && p[dr]>x)
  48. return dr;
  49. }
  50.  
  51. void Read()
  52. {
  53. fin >> n >> lg;
  54. for(int i=1; i<=n; i++)
  55. fin >> v[i];
  56. }
  57.  
  58. void VectorIncremDecrem()
  59. {
  60. int i, poz;
  61. for(i=1; i<=n; i++)
  62. {
  63. poz=CB(v[i]);
  64. if(v[i]-p[poz-1] < p[poz]-v[i])
  65. {
  66. pasi += v[i]-p[poz-1];
  67. a[i] = v[i]-p[poz-1];
  68. }
  69. else
  70. {
  71. pasi += p[poz]-v[i];
  72. a[i] = p[poz]-v[i];
  73. }
  74. }
  75. }
  76.  
  77. int main()
  78. {
  79. int i, ct, mini, s;
  80. Read();
  81. Ciur();
  82. VectorIncremDecrem();
  83.  
  84. ///cerinta 1
  85. fout<<pasi<<"\n";
  86.  
  87. ///cerinta2
  88. s=0;
  89. for(i=1; i<=lg; i++)
  90. s+=a[i];
  91.  
  92. mini=s;
  93. ct=1;
  94. for(i=lg+1; i<=n; i++)
  95. {
  96. s-=a[i-lg];
  97. s+=a[i];
  98. if(s < mini)
  99. {
  100. mini=s;
  101. ct=1;
  102. }
  103. else
  104. if(mini==s)
  105. ct++;
  106. }
  107. fout << mini << " " << ct << "\n";
  108.  
  109. return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement