CF 382C

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

 

你可能感兴趣的:(c)