http://codeforces.com/problemset/problem/382/C

读完题立刻知道怎么做,然后分类讨论到吐血,写挂了,巨蠢

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std ;
int n ;
int a[100005] ;
int temp1,temp2 ;
int cnt1,cnt2,p1,p2 ;
int gao()
{
    int f=1 ;
    cnt1=cnt2=0 ;
    temp1=a[0]-a[1] ;
    for(int i=1 ;i<n-1 ;i++)
        if(a[i]-a[i+1]!=temp1)
        {
            f=0 ;
            cnt1++ ;
            p1=i ;
            
        }
    temp2=a[n-1]-a[n-2] ;
    for(int i=n-2 ;i>=1 ;i--)
        if(a[i]-a[i-1]!=temp2)
        {
            f=0 ;
            cnt2++ ;
            p2=i ;
        }
    if(f)
        return 1 ;
    return 0 ;
}
int main()
{
    scanf("%d",&n) ;
    for(int i=0 ;i<n ;i++)
        scanf("%d",&a[i]) ;
    if(n==1)
    {
        puts("-1") ;
        goto end ;
    }
    sort(a,a+n) ;
    if(gao() && n>2)
    {
        int d=a[1]-a[0] ;
        if(d)
        {
            printf("2\n") ;
            printf("%d %d\n",a[0]-d,a[n-1]+d) ;
        }
        else
        {
            printf("1\n") ;
            printf("%d\n",a[0]) ;
        }
    }
    else if(n==2)
    {
        if(a[0]==a[1])
        {
            printf("1\n") ;
            printf("%d\n",a[0]) ;
        }
        else
        {
            int d=a[1]-a[0] ;
            if(d%2==0)
            {
                printf("3\n") ;
                printf("%d %d %d\n",a[0]-d,(a[0]+a[1])/2,a[1]+d) ;
            }
            else
            {
                printf("2\n") ;
                printf("%d %d\n",a[0]-d,a[1]+d) ;
            }
        }
    }
    else if(!gao() && min(cnt1,cnt2)==1)
    {
        if(((cnt1==1 && -temp1>temp2) || (cnt2==1 && -temp1<temp2)) && max(cnt1,cnt2)>=2)
        {
            printf("0\n") ;
            goto end ;
        }
        if(cnt1==1 && (-temp1<temp2))
        {
            if(a[p1]-(a[p1]+a[p1+1])/2==temp1 && (a[p1]+a[p1+1])%2==0)
            {
                puts("1") ;
                printf("%d\n",(a[p1]+a[p1+1])/2) ;
            }
            else
                puts("0") ;
        }
        else
        {
            if(a[p2]-(a[p2]+a[p2-1])/2==temp2 && (a[p2]+a[p2-1])%2==0)
            {
                puts("1") ;
                printf("%d\n",(a[p2]+a[p2-1])/2) ;
            }
            else
                puts("0") ;
        }
    }
    else
        puts("0") ;
    end :
    return 0 ;
}
View Code