欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Codeforces Round #519 B. Lost Array(思维)(1043B)

程序员文章站 2022-05-09 16:16:22
...

 

题目链接:http://codeforces.com/contest/1043/problem/B

       题意是给了n个数表示a数组,根据题目中的式子我们可以推出x0,x1,x2....,然后要我们求出x数组的长度有多少个并且输出x数组的长度,如果对于x0,x1,x2...对于题目中的式子不冲突时就表示这个长度的x数组是可行的,也就是对于在用a数组推x数组时,每一个x数组的位置仅只对应一个值,也就是说x0=1,后面出现的x0的值都是1。

       思路是我们先根据a数组,将所有的x数组求出来,然后去枚举长度是否可行就好了。


AC代码:

#include <bits/stdc++.h>
#define inf 1000005
using namespace std;
int n;
int pre[1005];
int b[1005],a[1005];

int main()
{
  scanf("%d",&n);
  int num = 0,num1 = 0;
  pre[0] = 0;
  for(int i=1;i<=n;i++){
    scanf("%d",&pre[i]);
  }
  for(int i=0;i<n;i++){
    a[i] = pre[i+1] - pre[i];
  }
  for(int i=1;i<=n;i++){
    int flag = 0;
    for(int j=i;j<=n;j++){
      if(pre[j] - pre[j-1] != a[(j-1)%i]){
        flag = 1;
        break;
      }
    }
    if(flag == 0){
      b[num++] = i;
    }
  }
  printf("%d\n",num);
  for(int i=0;i<num;i++){
    printf("%d ",b[i]);
  }
  puts("");
  return 0;
}