Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #define N 1000001
- using namespace std;
- ifstream fin("secvp.in");
- ofstream fout("secvp.out");
- int n, lg, v[100001]; ///datele de intrare
- bool c[N]; ///ciurul
- int p[100001], k; ///nr prime
- int a[100001]; ///nr de increm sau decrem pt fiecare nr de pe poz i
- int pasi; ///nr de pasi total
- void Ciur()
- {
- int i,j;
- /// 0 - nu e prim , 1 - e prim
- c[2] = 1;
- for(i = 3; i <= N; i+=2)
- c[i] = 1;
- for(i=3; i <= N; i+=2)
- if(c[i]==1)
- {
- p[++k] = i; ///in p pastram toate nr prime
- for(j = 2*i; j<=N; j += i)
- c[j] = 0;
- }
- }
- int CB(int x)
- {
- int st, dr, m;
- st = 1;
- dr = k;
- while(st < dr)
- {
- m = (st+dr) / 2;
- if(p[m] == x)
- return m;
- else if(x < p[m])
- dr = m-1;
- else st = m+1;
- }
- if(p[dr]<=x && p[dr+1]>x)
- return dr+1;
- if(p[dr-1]<=x && p[dr]>x)
- return dr;
- }
- void Read()
- {
- fin >> n >> lg;
- for(int i=1; i<=n; i++)
- fin >> v[i];
- }
- void VectorIncremDecrem()
- {
- int i, poz;
- for(i=1; i<=n; i++)
- {
- poz=CB(v[i]);
- if(v[i]-p[poz-1] < p[poz]-v[i])
- {
- pasi += v[i]-p[poz-1];
- a[i] = v[i]-p[poz-1];
- }
- else
- {
- pasi += p[poz]-v[i];
- a[i] = p[poz]-v[i];
- }
- }
- }
- int main()
- {
- int i, ct, mini, s;
- Read();
- Ciur();
- VectorIncremDecrem();
- ///cerinta 1
- fout<<pasi<<"\n";
- ///cerinta2
- s=0;
- for(i=1; i<=lg; i++)
- s+=a[i];
- mini=s;
- ct=1;
- for(i=lg+1; i<=n; i++)
- {
- s-=a[i-lg];
- s+=a[i];
- if(s < mini)
- {
- mini=s;
- ct=1;
- }
- else
- if(mini==s)
- ct++;
- }
- fout << mini << " " << ct << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement