CF1043BLost Array(枚举)

Posted myx12345

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF1043BLost Array(枚举)相关的知识,希望对你有一定的参考价值。

题意:给定n与数组a,求所有的k使得存在x数组能按以下规则构造出a

技术分享图片

n<=1e3,a[i]<=1e6

思路:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<string>
 4 #include<cmath>
 5 #include<iostream>
 6 #include<algorithm>
 7 #include<map>
 8 #include<queue>
 9 #include<vector>
10 #include<ctime>
11 using namespace std;
12 typedef long long ll;
13 typedef unsigned int uint;
14 typedef unsigned long long ull;
15 typedef pair<int,int> PII;
16 typedef vector<int> VI;
17 #define fi first
18 #define se second 
19 #define MP make_pair
20 #define N  210000
21 #define M  130
22 #define MOD 1000000007
23 #define eps 1e-8 
24 #define pi acos(-1)
25 #define oo 1000000000
26 
27 int a[N],x[N],c[N];
28 
29 int main()
30 {
31     int n;
32     scanf("%d",&n);
33     a[0]=0;
34     for(int i=1;i<=n;i++) scanf("%d",&a[i]);
35     
36     int ans=0;
37     for(int k=1;k<=n;k++)
38     {
39         int flag=1;
40         for(int j=0;j<=k;j++) x[j]=oo;
41         x[0]=a[1];
42         for(int j=2;j<=n;j++) 
43         {
44             if(x[(j-1)%k]!=oo&&x[(j-1)%k]!=a[j]-a[j-1]){flag=0; break;}
45             x[(j-1)%k]=a[j]-a[j-1];     
46         }
47         if(flag) c[++ans]=k;
48     }
49     printf("%d
",ans);
50     for(int i=1;i<=ans-1;i++) printf("%d ",c[i]);
51     printf("%d",c[ans]);
52     return 0;
53 }

 

以上是关于CF1043BLost Array(枚举)的主要内容,如果未能解决你的问题,请参考以下文章

前缀和+排序——cf1043E

[CF 1043F] Make It One

CF1043CSmallest Word(构造)

CF1043DMysterious Crime(贡献)

leetcode1043. Partition Array for Maximum Sum

CF360B Levko and Array