哈尔滨理工大学软件与微电子学院程序设计竞赛(同步赛)B.Min Value

题目链接

题目描述

有一天,老师告诉多多:绝对值是指一个数在数轴上所对应点到原点的距离。
接下来老师给多多一个由 N 个数组成的序列 a1,a2,a3,······,an-1,an,他想让多多从中任选两个数 ai 和 aj,使得 ai + aj 的绝对值最小,并且计算出 i + j 的值,其中 i ≠ j。
由于老师给出的序列太长,多多无法完成这个任务,请你帮助他。

输入描述:

输入第一行包含一个正整数 N (2 ≤ N ≤ 100000)
接下来 N 行,每行一个整数 ai (1 ≤ i ≤ N,-1e6 ≤ ai ≤ 1e6)

输出描述:

输出两个数,中间用空格分开,ai + aj 的绝对值的最小值和 i + j(如果有多组 i 和 j 满足条件,输出 i + j 最小的一组)

示例1

输入

5
-2
6
7
7
-8

输出

1 8

题意很简单,我用的是最简单暴力的方法,思路清晰,就是要考虑好几个点~
首先用两个数组记录分别记录正数和负数,然后用一个数组记录每个数的最小的两个下标,为什么是两个,因为如果最小的和就为两个该数相加,只有一个下标就相当于一个数选了两次,显然不符合条件,做了上述准备后计算就非常简单,最小值无外乎以下三种情况:
1.负数数组里面最大的两个数
2.正数数组里面最小的两个数
3.对负数数组里的数,在正数数组里面二分查找最接近该数的数,最小值就为两数之和
AC代码如下:

#include<bits/stdc++.h>
using namespace std;
int n,k,minv=2e6+5,minp=2e5+5;
map<int,pair<int,int> >m;
void judge(int x,int y){if(abs(x+y)<minv) minv=abs(x+y),x==y?minp=m[x].first+m[x].second:minp=m[x].first+m[y].first;if(abs(x+y)==minv) x==y?minp=min(minp,m[x].first+m[y].second):minp=min(minp,m[x].first+m[y].first);
}
main(){cin>>n;vector<int>v1,v2;for(int i=1;i<=n;i++){cin>>k;k<0?v1.push_back(k):v2.push_back(k);m[k].first==0?m[k].first=i:(m[k].first<i?(m[k].second==0?m[k].second=i:m[k].second=min(m[k].second,i)):m[k].first=min(m[k].first,i));}sort(v1.rbegin(),v1.rend());sort(v2.begin(),v2.end());if(v1.size()>1) judge(v1[0],v1[1]);if(v2.size()>1) judge(v2[0],v2[1]);for(auto i:v1){int pos=lower_bound(v2.begin(),v2.end(),-i)-v2.begin();if(pos==v2.size()) judge(v2.back(),i);else{judge(v2[pos],i);if(pos>0) judge(v2[pos-1],i);}}cout<<minv<<" "<<minp;
}

哈尔滨理工大学软件与微电子学院程序设计竞赛(同步赛)B.Min Value相关推荐

  1. 哈尔滨理工大学软件与微电子学院程序设计竞赛(新生赛)

    关于哈尔滨理工大学软件与微电子学院程序设计竞赛(新生赛) 下午五点四十开始的比赛,五点二十我才刚刚抽完血,实在是有点难顶,再加上还没有吃饭,刚开始做题的时候还真是有点发懵,胳膊也很难受. 这应该是我第 ...

  2. 哈尔滨理工大学软件与微电子学院程序设计竞赛(新生赛) -补档

    time:2019.11.08 题目较多,所以使用目录. 文章目录 Problem A:[NowCoder54536 小乐乐学编程](https://ac.nowcoder.com/acm/probl ...

  3. 哈尔滨理工大学软件与微电子学院程序设计竞赛 H.Maze

    哈尔滨理工大学软件与微电子学院程序设计竞赛 H.Maze 题目链接 题目描述 多多在一个N行M列的迷宫中,迷宫只由符号 '+' 或 '-' 组成.如果多多在 '+' 上,下一步只能走到上.下.左.右四 ...

  4. 哈尔滨理工大学软件与微电子学院程序设计竞赛 题解

    DEF题比较难一些,目前本菜鸡能力有限. 文章目录 A-Race B-Min Value C-Coronavirus G-OXR H-Maze I-Prime J-Compare K-Walk L-D ...

  5. 哈尔滨理工大学软件与微电子学院程序设计竞赛(同步赛)(重现赛)

    比赛地址 A. 思路:模拟 #include<iostream> #include<cstring> #include<cstdio> #include<al ...

  6. 哈尔滨理工大学软件与微电子学院程序设计竞赛——C.Coronavirus【BFS】

    题目传送门 题解 直接BFS跑一遍即可 水题 AC-Code #include <bits/stdc++.h> using namespace std;const int maxn = 1 ...

  7. 哈尔滨理工大学软件与微电子学院程序设计竞赛(19级新生赛)——题解

    注:所有题目不要求多组输入 索引: A. 小乐乐学编程 B. 小乐乐算平均分 C. 小乐乐找最大数 D. 小乐乐是否被叫家长 E. 小乐乐转换成绩 F. 小乐乐算多少人被请家长 G. 小乐乐算最高分 ...

  8. 哈尔滨理工大学软件与微电子学院程序设计竞赛(同步赛) A

    文章目录 Race 题解 代码 模拟时间 模拟距离 Race 题解 模拟. 可以模拟时间增加,也可以模拟距离变化,本质是一样的. 之前看到了公倍数的条件,但是没用到,看了大佬代码之后恍然大悟hhhh ...

  9. 哈尔滨理工大学软件与微电子学院程序设计竞赛(同步赛) H

    Maze 题解 DFS/BFS. 这里用的是 D F S DFS DFS.其中有并查集的思想. 题目所求为某个格子最多能到达的格子的数量,那么如果格子A可以到达格子B,则格子B必定能到格子A. 也就是 ...

最新文章

  1. jenkins安装和使用
  2. Firefox火狐广告过滤插件Adblock Plus过滤规则包[中文维护小组]
  3. (FCN)-Fully Convolutional Networks for Semantic Segmentation
  4. C语言求一个数是否为armstrong阿姆斯特朗数(附完整源码)
  5. 《剑指offer》二进制中1的个数
  6. 计算机领域专业术语中英文对照(时常更新)
  7. 启动马达接线实物图_东元伺服驱动马达
  8. 锁屏面试题百日百刷-VUE篇(一)
  9. Packet for query is too large (12164278 > 4194304). You can change this value
  10. 用画图工具制作背景透明的图片总结
  11. 惠普计算机工作站,HP 笔记本计算机和移动工作站电池安全召回和更换计划
  12. 《老司机,带带我》之考驾照
  13. PrinTao CANON Home Studio Edition 8.0r12 17 Mac 佳能专业打印软件
  14. 【快速检索,稳定出版,强大委员会Speaker阵容】ICCCS 2022|第7届通信计算机大会
  15. 基于ssm的药房药店药品管理系统
  16. Java中抽象类与方法的重写
  17. 基于微信选修课报名小程序系统设计与实现 开题报告
  18. 网鼎杯 Comment 解题记录
  19. 2020南京理工大学计算机考研经验
  20. window10右下角 天气 关闭

热门文章

  1. java 爬取京东商品详细信息 价格
  2. 区块链必修课:网络安全技术
  3. 群晖NAS 7.X 搭建个人博客网站并发布公网 5/8
  4. 数据结构01-------数据结构的介绍
  5. uni-app 输入框键盘把背景图顶上去
  6. 无法建立跟远程计算机的连接,win10系统远程桌面连接失败客户端无法建立与远程计算机的连接的解决方法...
  7. 性能测试失败原因之性能测试十宗罪
  8. 玩游戏 CPU温度就猛升到90度以上,为什么
  9. 服务器404等常用状态码及其对应含义(报错原因)
  10. 【宅男宅女们的福音】电影天堂最新电影爬取及搜索脚本