1. 程式人生 > >Codeforces Round #519 B. Lost Array(思維)(1043B)

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

       題意是給了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;
}