CH 1301 邻值查找 set

2023-10-04 02:31
文章标签 查找 set ch 1301 邻值

本文主要是介绍CH 1301 邻值查找 set,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题 H: 邻值查找

时间限制: 1 Sec  内存限制: 128 MB
提交: 23  解决: 11
[提交] [状态] [讨论版] [命题人:admin]

题目描述

给定一个长度为 n 的序列 A,A 中的数各不相同。对于 A 中的每一个数 Ai,求:
min(1≤j<i) ⁡|Ai-Aj|
以及令上式取到最小值的 j(记为 Pi)。若最小值点不唯一,则选择使 Aj 较小的那个。

 

输入

第一行一个整数n,第二行n个数A_1~A_n。

 

输出

n-1行,每行2个用空格隔开的整数。分别表示当i取2~n时,对应的 min(1≤j<i) ⁡|A_i-A_j| 和 P_i 的值。

 

样例输入

3
1 5 3

 

样例输出

4 1
2 1

 

提示

对于30%的数据: n<=100
对于70%的数据: n<=10^4
对于100%的数据: n<=10^5, |A_i|<=10^9

 

[提交][状态]

题意:求出每个数a之前的与a的差的绝对值最小的那个数,若差的绝对值相同,则输出数最小的那个

思路:STL里的set可以将输入的序列自动排序,那么就该数之前与之后的数字就是与该数差最小的数,比较之后输出即可

if else里面的条件改变了迭代器的位置,一直没发现,窒息

自认为写的挺麻烦,不过应该很好懂。。

代码:

#include <bits/stdc++.h>using namespace std;
const int maxn = 1e5 + 10;
const int inf = 0x3f3f3f3f;struct node {int val, pos;bool operator<(const node &rhs) const {return val < rhs.val;}
};set<node> p;int main() {int n, a, b;scanf("%d", &n);scanf("%d", &a);p.insert({a, 1});set<node>::iterator q, t;for (int i = 2; i <= n; i++) {scanf("%d", &b);p.insert({b, i});if (p.size() == 2) {printf("%d 1\n", abs(a - b));continue;}q = p.find({b, i});if ((++q) == p.end()) {q--;node x = (*(--q));x.val = abs(b - x.val);printf("%d %d\n", x.val, x.pos);continue;} else if ((--q) == p.begin()) {node x;x.val = abs(b - (*(++q)).val);x.pos = (*(q)).pos;printf("%d %d\n", x.val, x.pos);continue;}node x, y;q--;x.val = (*(q)).val;x.pos = (*q).pos;q++;y.val = (*(++q)).val;y.pos = (*(q)).pos;if (abs(b - x.val) < abs(b - y.val))printf("%d %d\n", abs(b - x.val), x.pos);else if (abs(b - x.val) > abs(b - y.val))printf("%d %d\n", abs(b - y.val), y.pos);else {printf("%d %d\n", abs(b - y.val), x.pos);}}return 0;
}

 

这篇关于CH 1301 邻值查找 set的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136

相关文章

poj 3050 dfs + set的妙用

题意: 给一个5x5的矩阵,求由多少个由连续6个元素组成的不一样的字符的个数。 解析: dfs + set去重搞定。 代码: #include <iostream>#include <cstdio>#include <set>#include <cstdlib>#include <algorithm>#include <cstring>#include <cm

Collection List Set Map的区别和联系

Collection List Set Map的区别和联系 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否

论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS https://openreview.net/forum?id=KS8mIvetg2 验证测试集污染在黑盒语言模型中 文章目录 验证测试集污染在黑盒语言模型中摘要1 引言 摘要 大型语言模型是在大量互联网数据上训练的,这引发了人们的担忧和猜测,即它们可能已

多路转接之select(fd_set介绍,参数详细介绍),实现非阻塞式网络通信

目录 多路转接之select 引入 介绍 fd_set 函数原型 nfds readfds / writefds / exceptfds readfds  总结  fd_set操作接口  timeout timevalue 结构体 传入值 返回值 代码 注意点 -- 调用函数 select的参数填充  获取新连接 注意点 -- 通信时的调用函数 添加新fd到

Verybot之OpenCV应用二:霍夫变换查找圆

其实我是想通过这个程序来测试一下,OpenCV在Verybot上跑得怎么样,霍夫变换的原理就不多说了,下面是程序: #include "cv.h"#include "highgui.h"#include "stdio.h"int main(int argc, char** argv){cvNamedWindow("vedio",0);CvCapture* capture;i

Android set Tag, findViewWithTag使用

设置了tag为“principal”的view ImageView principal = (ImageView) findViewById(R.id.imagen_home_0);principal.setTag("principal"); 在其它地方获取,获取已经设置了tag为“principal”的view LayoutInflater inflater = LayoutInflate

Win8下如何快速查找和删除电脑中的病毒

Win8系统如何查找和删除病毒?检查你的电脑是否存在病毒的一种快速方法是使用 Windows Defender. 此恶意软件防护随 Windows 提供,可帮助识别和删除病毒、间谍软件和其他恶意软件。   注意:如果你使用的是 Windows RT,则 Windows Defender 会始终启用,并且不能关闭。   如果你使用的是 Windows 8,则可以根据自己的喜好运行由其他

C++ STL关联容器Set与集合论入门

1. 简介 Set(集合)属于关联式容器,也是STL中最实用的容器,关联式容器依据特定的排序准则,自动为其元素排序。Set集合的底层使用一颗红黑树,其属于一种非线性的数据结构,每一次插入数据都会自动进行排序,注意,不是需要排序时再排序,而是每一次插入数据的时候其都会自动进行排序。因此,Set中的元素总是顺序的。 Set的性质有:数据自动进行排序且数据唯一,是一种集合元素,允许进行数学上的集合相

nyoj 685 查找字符串

当初一开始没做出来。 后来,学习过一段时间之后,在返回来做这道题,忽然发现,map类容器可以做。 PS:需要注意的是:此题如果用c++的输入输出的话,会超时。 O(time):gets()<  scanf() < cin。   附上代码: #include<stdio.h>#include<map>#include<string>#include<string.h>usin

【C++二分查找】2439. 最小化数组中的最大值

本文涉及的基础知识点 C++二分查找 LeetCode2439. 最小化数组中的最大值 给你一个下标从 0 开始的数组 nums ,它含有 n 个非负整数。 每一步操作中,你需要: 选择一个满足 1 <= i < n 的整数 i ,且 nums[i] > 0 。 将 nums[i] 减 1 。 将 nums[i - 1] 加 1 。 你可以对数组执行 任意 次上述操作,请你返回可以得到的 n