2014年1月17日 星期五

Codeforces Round #224 (Div. 2) C - Arithmetic Progression


#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<vector>
using namespace std;
int s[100005];
vector<int> arr;
int main(){
    int n,i,add=0,p;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&s[i]);
    if(n==1){
        puts("-1");
        return 0;
    }
    sort(s,s+n);
    for(i=1;i<n;i++)
        arr.push_back(s[i]-s[i-1]);
    sort(arr.begin(),arr.end());

    p=unique(arr.begin(),arr.end())-arr.begin();
    p=arr.size()-p;
    while(p--) arr.pop_back();/*for(i=0;i<arr.size();i++)
        printf("%d ",arr[i]);*/
    if(arr.size()>2 || arr.size()==2 && arr[0]==0 || arr.size()==2 && arr[1]%arr[0] || arr.size()==2 && arr[1]/arr[0]!=2){
        puts("0");
        return 0;
    }
    if(arr.size()==1){
        if(arr[0]==0) printf("1\n%d\n",s[0]);
        else if(n==2 && arr[0]%2==0){
            printf("3\n%d %d %d\n",s[0]-arr[0],(s[0]+s[1])/2,s[n-1]+arr[0]);
        }
        else{
            printf("2\n%d %d\n",s[0]-arr[0],s[n-1]+arr[0]);
        }
        return 0;
    }
    for(i=1;i<n;i++){
        if(s[i]-s[i-1]==arr[1])
            add++,p=s[i];
    }
    if(add==1) printf("1\n%d\n",p-arr[0]);
    else puts("0");
}

沒有留言:

張貼留言