https://codeforces.com/contest/1185/problem/D

题意:给一个序列,移除一个数然后排序后使得序列成为等差数列,求移除的下标。

解法:

先排序,把所有差值扔到map里,显然,移除一个数最多去掉两个差值,所以map.size-2不能大于1.

然后遍历数组,修改map检查,或遍历map的差值,检查数组均可,这里选择遍历map检查数组更好写。

但有一个坑点,如果数组排序后本身是等差数列,则移除首项,注意!!这里的首项是排序后的,应该输出排序前的id,不能直接输出1.

#include<bits/stdc++.h>
#define sz(v) (int)v.size() using namespace std; typedef long long ll;
const int maxn=1000100;
const int INF=(1<<29); int n;
struct Node{
ll x;
int id;
friend bool operator<(Node A,Node B){
return A.x<B.x;
}
};Node p[maxn];
map<ll,int> mp; int check(ll d){
// 1
int cnt=0;
ll t=p[1].x;
vector<int> v;
for(int i=1;i<=n;i++){
if(p[i].x!=t) cnt++,v.push_back(p[i].id);
else t+=d;
}
if(cnt==0) return p[1].id;
if(cnt==1) return v[0]; // n
cnt=0;t=p[n].x;v.clear();
for(int i=n;i>=1;i--){
if(p[i].x!=t) cnt++,v.push_back(p[i].id);
else t-=d;
}
if(cnt==0) return p[1].id;
if(cnt==1) return v[0]; return -1;
} void solve(){
mp.clear();
for(int i=1;i<=n;i++) cin>>p[i].x,p[i].id=i;
sort(p+1,p+n+1);
for(int i=2;i<=n;i++) mp[p[i].x-p[i-1].x]++;
if(n<=3){
puts("1");return;
}
if(sz(mp)-2>1){
puts("-1");return;
}
for(map<ll,int>::iterator it=mp.begin();it!=mp.end();++it){
int index=check(it->first);
if(index!=-1){
cout<<index<<endl;return;
}
}
puts("-1");
} int main(){
// freopen("in.txt","r",stdin);
while(cin>>n) solve();
return 0;
}

百题计划-2 codeforces1185D Extra Element 暴力的更多相关文章

  1. 【第一期百题计划进行中,快来打卡学习】吃透java、细化到知识点的练习题及笔试题,助你轻松搞定java

    [快来免费打卡学习]参与方式 本期百题计划开始时间:2022-02-09,今日打卡题已在文中标红. 0.本文文末评论区打卡,需要登录才可以打卡以及查看其他人的打卡记录 1.以下练习题,请用对应的知识点 ...

  2. Python百题计划

    一.基础篇 想要像类似执行shell脚本一样执行Python脚本,需要在py文件开头加上什么?KEY:#!/usr/bin/env python Python解释器在加载 .py 文件中的代码时,会对 ...

  3. python 百题计划

    一.基础篇 想要像类似执行shell脚本一样执行Python脚本,需要在py文件开头加上什么?KEY:#!/usr/bin/env python Python解释器在加载 .py 文件中的代码时,会对 ...

  4. bzoj3208: 花神的秒题计划Ⅰ

    3208: 花神的秒题计划Ⅰ Time Limit: 16 Sec  Memory Limit: 128 MBSubmit: 323  Solved: 211[Submit][Status] Desc ...

  5. BZOJ第一页刷题计划

    BZOJ第一页刷题计划 已完成:67 / 90 [BZOJ1000]A+B Problem:A+B: [BZOJ1001][BeiJing2006]狼抓兔子:最小割: [BZOJ1002][FJOI2 ...

  6. bzoj 3208 花神的秒题计划I

    bzoj 3208 花神的秒题计划I Description 背景[backboard]: Memphis等一群蒟蒻出题中,花神凑过来秒题-- 描述[discribe]: 花花山峰峦起伏,峰顶常年被雪 ...

  7. Running to the End(Codeforces & AtCoder 百套计划)

    ...Reserved for the future... 仿照xxy dalao的CF&CC百套计划,做了一个Codeforces & AtCoder 百套计划,按这个速度刷下去,每 ...

  8. DP百题练(一)

    目录 DP百题练(一) 线性 DP 简述 Arithmetic Progressions [ZJOI2006]物流运输 LG1095 守望者的逃离 LG1103 书本整理 CH5102 移动服务 LG ...

  9. 【NOIP2015模拟11.4】JZOJ8月6日提高组T1 刷题计划

    [NOIP2015模拟11.4]JZOJ8月6日提高组T1 刷题计划 题目 题解 题意 有\(n\)道题,编号为1~\(n\) 给出\(m\)次操作 每次操作有3种类型 1 \(x\) 表示交了\(A ...

  10. 【百题留念】hdoj 1524 A Chess Game(dfs + SG函数应用)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1524 #include<stdio.h> #include<cstring> ...

随机推荐

  1. Linux 一次性创建多个文件

    创建多个文件,文件名数字编号是递增的,在文件名后面加上{n..m}: touch file-{1..10}.txt

  2. Flutter:StatefulWidget 怎么传参

    定义好一个有状态(或无状态)的组件之后,需要为其传递一些参数,希望组件能够更加灵活使用.那么,在 Flutter 中如何为其传递参数呢? 以下是 StatefulWidget 传递值的步骤,一共三步: ...

  3. 计网学习笔记二 Link Layer Service

    在上一周的计网学习了network和Internet的总论.在这一周开始的未来几讲将集中在链路层link layer,并且会有相应的计网lab完成.在这一讲中,我们主要关注链路层提供的服务. 课程资料 ...

  4. Linux命令使用时路径存在空格、特殊符号

    https://blog.csdn.net/Homewm/article/details/102935965 Linux命令使用时路径存在空格.特殊符号(如-.@等等)如何处理呢? 再如可以转义的字符 ...

  5. MogDB 学习笔记之 -- 索引失效

    [[toc]]# 概念描述哪些操作会导致分区表的全局索引失效(比如 move partition,drop partition ,truncate partition ,split partition ...

  6. [WPF]MVVM的数据绑定

    啥是MVVM? 我理解的MVVM是Model(数据),View(界面),ViewModel(数据与界面之间的桥梁)的缩写,是一种编程模式.前期需要多花一些时间去编辑绑定,在后期维护方便.只需要关注数据 ...

  7. python cls方法_关于类方法中的cls

    title: python cls方法_关于类方法中的cls author: 杨晓东 permalink: python cls方法_关于类方法中的cls date: 2021-10-02 11:27 ...

  8. vue页面添加锚点后 点击不改变URL

    html: <a @click="changeHash('#row')"> {{ $t("msg.desc1") }} </a>   j ...

  9. win7电脑休眠后只能按重启键解决办法

    一.点击"开始"后选择控制面板 二.选择"电源选项" 三.点击"更改计划设置" 四.选择"更改高级电源设置" 五.点击& ...

  10. 图片在div中居中

    要将一张图片垂直和水平居中在一个 <div> 元素中,你可以使用以下 CSS 样式: div { display: flex; justify-content: center; align ...