CSES - Bonus contest - Results
Submission details
Task:Milestone Counter
Sender:wavelets
Submission time:2015-11-25 18:24:22 +0200
Language:C++
Status:READY
Result:
Test results
testverdicttime
#10.06 sdetails
#2ACCEPTED0.05 sdetails
#30.06 sdetails
#40.05 sdetails
#5ACCEPTED0.06 sdetails
#6ACCEPTED0.05 sdetails

Code

#include <vector>
#include <valarray>
#include <deque>
#include <iostream>
#include <set>
using namespace std;
int gcd(int a,int b){return b==0?a:gcd(b,a%b);}
struct fraction:pair<int,int>{
fraction(int a=0,int b=1):pair<int,int>(a,b){int c=gcd(a,b);first/=c;second/=c;}
};
int main(){
int m,n;
cin>>m>>n;
vector<int> M(m);
vector<int> N(n);
for(int i=0;i<m;i++)cin>>M[i];
for(int i=0;i<n;i++)cin>>N[i];
int v=M[0];
for(auto&it:M)it-=v;
deque<int> qq(N.begin(),N.begin()+m);
set<fraction> a;
set<int> b;
for(int i=0;i<=n-m;++i){
fraction vv(qq[1]-qq[0],M[1]);
for(int j=2;j<m;++j){
if(vv==fraction(qq[j]-qq[0],M[j]))continue;
goto asd;
}
a.insert(vv);
b.insert(qq[1]-qq[0]);
asd: qq.pop_front();
if(i+m<n)qq.push_back(N[i+m]);
}
cout<<a.size()<<'\n';
int cnt=b.size();
for(auto&it:b)cout<<it<<" \n"[--cnt==0];
return 0;
}

Test details

Test 1

Verdict:

input
17 47
100 101 102 104 110 116 128 16...

correct output
11
1 6 36 216 1296 7776 46656 279...

user output
7
1 6 36 216 1296 7776 46656

Test 2

Verdict: ACCEPTED

input
500 1000
100 102 104 106 108 110 112 11...

correct output
1
2

user output
1
2

Test 3

Verdict:

input
12 40
1 2 4 8 16 32 64 128 256 512 1...

correct output
18
1 8192 16384 32768 65536 13107...

user output
8
1 8192 16384 32768 65536 13107...

Test 4

Verdict:

input
2 1000
131345678912349 23234567891234...

correct output
999
3 5 7 9 11 13 15 17 19 21 23 2...

user output
1
0

Test 5

Verdict: ACCEPTED

input
22 102
100 101 102 104 106 110 114 12...

correct output
0

user output
0

Test 6

Verdict: ACCEPTED

input
22 52
100 101 102 104 106 110 114 12...

correct output
16
1 2 4 8 16 32 64 128 256 512 1...

user output
16
1 2 4 8 16 32 64 128 256 512 1...