模拟:
要么删第一个,要么删第二个,要么删之后中间的
第一个和第二个需要确定等差值
#include<bits/stdc++.h>
using namespace std;
#define maxn 200005
int n;
struct Node{
int id;
long long v;
};
Node num[maxn];
bool cmp(const Node& x,const Node& y){
if( x.v == y.v){
if( x.id < y.id ) return true;
else return false;
}
if(x.v < y.v) return true;
return false;
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>num[i].v;
num[i].id = i+1;
}
sort(num,num+n,cmp);
// delete 1
long long key = num[2].v - num[1].v;
bool ans = true;
for(int i=3;i<n;i++){
if(num[i].v - num[i-1].v != key){
ans = false;
break;
}
}
if(ans){
cout<<num[0].id<<endl;
return 0;
}
// delete second
key = num[2].v - num[0].v;
ans = true;
for(int i=3;i<n;i++){
if(num[i].v - num[i-1].v != key){
ans = false;
break;
}
}
if(ans){
cout<<num[1].id<<endl;
return 0;
}
// delete mid
key = num[1].v - num[0].v;
ans = true;
for(int i=2;i<n;i++){
if(num[i].v - num[i-1].v != key){
// 删除 i
if(i+1<n){
if(num[i+1].v - num[i-1].v == key){
for(int j=i+2;j<n;j++){
if(num[j].v - num[j-1].v != key){
cout<<-1<<endl;
return 0;
}
}
cout<<num[i].id<<endl;
return 0;
}else{
cout<<-1<<endl;
return 0;
}
}else{
cout<<num[i].id<<endl;
return 0;
}
}
}
cout<<num[0].id<<endl;
return 0;
}