codeforces 1185d D. Extra Element

时间:2019-09-16
本文章向大家介绍codeforces 1185d D. Extra Element,主要包括codeforces 1185d D. Extra Element使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题意:长为n的序列,能否恰好去一个数后为等差数列。能输出位置,不能输出-1。

先排序,然后只可能去第1个数,第2个数或者其他数。那么先试2次。如果不行,arr[2]-arr[1]得到公差,再试一次。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <cstring>
#include <map>
#include <queue>
#include <set>
#include <cassert>
#include <stack>
#include <bitset>
#define mkp make_pair
#define err cout<<"err"<<endl
using namespace std;
const double EPS=1e-8;
typedef long long lon;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const lon SZ=200010,SSZ=SZ*SZ,APB=4,one=1;
const lon INF=0x3f3f3f3f,mod=1000000007;
lon n;
pii arr[SZ];

void init()
{
    cin>>n;
    for(int i=1;i<=n;++i)
    {
        cin>>arr[i].first;
        arr[i].second=i;
    }
    sort(arr+1,arr+1+n);
    bool ok=1;
    int d=arr[3].first-arr[2].first;
    for(int i=4;i<=n;++i)
    {
        if(arr[i].first-arr[i-1].first!=d)ok=0;
    }
    if(ok)
    {
        cout<<arr[1].second<<endl;
        return;
    }
    ok=1;
    d=arr[3].first-arr[1].first;
    for(int i=4;i<=n;++i)
    {
        if(arr[i].first-arr[i-1].first!=d)ok=0;
    }
    if(ok)
    {
        cout<<arr[2].second<<endl;
        return;
    }
    d=arr[2].first-arr[1].first;
    int tim=0;
    int pre=2,pos;
    for(int i=3;i<=n;++i)
    {
        if(arr[i].first-arr[pre].first!=d)
        {
            ++tim;
            pos=i;
        }
        else pre=i;
    }
    if(tim==0)
    {
        if(d==0)cout<<arr[n].second<<endl;
        else cout<<-1<<endl;
    }
    else if(tim==1)cout<<arr[pos].second<<endl;
    else cout<<-1<<endl;
}

void work()
{
    
}

void release()
{
    
}

int main()
{
    std::ios::sync_with_stdio(0);
    //freopen("d:\\1.txt","r",stdin);
    lon casenum;
    //cin>>casenum;
    //cout<<casenum<<endl;
    //for(lon tim=1;tim<=casenum;++tim)
    //for(lon tim=1;cin>>n;++tim)
    {
        //cout<<"Case #"<<tim<<": ";
        init();
        work();
        release();
    }
    return 0;
}

原文地址:https://www.cnblogs.com/gaudar/p/11526092.html