【链接】 我是链接,点我呀:)
【题意】
【题解】
枚举k
不难根据a得到x[0..k-1]
然后再根据a[k+1..n]来验证一下得到的x是否正确就好。
【代码】
#include <bits/stdc++.h>
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
using namespace std;
const int N = 1000;
int n;
int a[N+10];
int x[N+10];
vector<int> v;
int main()
{
ios::sync_with_stdio(0),cin.tie(0);
cin >> n;
rep1(i,1,n) cin >> a[i];
a[0] = 0;
rep1(k,1,n){
/*
x0 x1 x2 x[k-1]
a0 a1 a2 a3.. a[k]
*/
for (int i = 0;i < k;i++){
//a[i+1]=x[i]+a[i]
x[i] = a[i+1]-a[i];
}
int ok = 1;
for (int i = k+1;i <= n;i++)
if (a[i]!=x[(i-1)%k]+a[i-1]){
ok = 0;
}
if (ok) v.push_back(k);
}
cout<<(int)v.size()<<endl;
for (int i = 0;i < (int)v.size();i++){
cout<<v[i]<<' ';
}
return 0;
}