A不说了
C
2
1 1
这组特殊数据没考虑卡了一个点 然后果断降分了
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
int a[111111];
int s[111111];
int b[111111];
int main()
{
int n;
while(cin>>n)
{
int ans,res,t;
int i;
for(i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
if(n==1)
{
cout<<"-1\n";
continue;
}
else
{
if(n==2)
{
int lc=a[2]-a[1];
if(lc==0)
{
cout<<"1\n";
cout<<a[1]<<endl;
}
else
{
if(lc%2==0)
{
cout<<"3\n";
cout<<a[1]-lc<<" "<<a[1]+lc/2<<" "<<a[2]+lc<<endl;
}
else
{
cout<<"2\n";
cout<<a[1]-lc<<" "<<a[2]+lc<<endl;
}
}
}
else
{
for(i=2;i<=n;i++)
{
s[i-1]=a[i]-a[i-1];
//cout<<s[i-1]<<endl;
}
int flag=0;
for(i=2;i<n;i++)
{
if(s[i]==s[i-1])
continue;
else
{
b[flag++]=s[i-1];
b[flag++]=s[i];
// cout<<s[i-1]<<" "<<s[i]<<endl;
}
}
//cout<<flag<<endl;
if(flag==0)
{
if(s[1]==0)
{
cout<<"1\n";
cout<<a[1]<<endl;
}
else
{
cout<<"2\n";
cout<<a[1]-s[1]<<" "<<a[n]+s[1]<<endl;
}
}
else
{
if(flag>4)
{
cout<<"0\n";
}
else
{
int le=0;
sort(b,b+flag);
for(i=0;i<flag;i++)
{
if(b[i]!=b[i-1])
le++;
}
//cout<<le<<endl;
if(le>2)
cout<<"0\n";
else
{
ans=-10;
res=1111111;
for(i=0;i<flag;i++)
{
ans=max(ans,b[i]);
res=min(res,b[i]);
}
//cout<<ans<<" "<<res<<endl;
int lf=0;
for(i=1;i<n;i++)
{
if(s[i]==ans)
lf++;
}
double c=ans/2.0;
double d=res;
//cout<<c<<" "<<d<<endl;
if(lf==1)
{
if(c==d)
{
for(i=1;i<n;i++)
if(s[i]==ans)
{
t=i;
break;
}
cout<<"1\n";
cout<<a[t]+res<<endl;
}
else
cout<<"0\n";
}
else
cout<<"0\n";
}
}
}
}
}
}
return 0;
}
B题稍后做。。