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 ; }