当前位置: 首页 > news >正文

Sum of Three Values(sorting and searching)

题目描述

给定一个包含n个整数的数组,找到不同位置的三个值,它们的和为s。

输入

第一行两个整数n(1≤n≤5000)和s(1≤s≤10^9),分别表示数组的大小以及目标和。
第二行有n个整数a1,a2,...an(1≤ai≤10^9),表示数组元素的值。

输出

输出三个整数,对应这三个元素值的位置。如果有多个解决方案,你可以输出任意一个。如果没有解决方案,输出IMPOSSIBLE。

样例输入
4 8
2 7 5 1
样例输出
1 3 4
思路分析

1.创建一个存储 pair 类型的 vector,其中 pair 的第一个元素存储数组元素的值,第二个元素存储该元素在原数组中的下标(1-based indexing)。

2.对 vector 按照元素值进行排序,这样方便后续使用双指针法。

3.遍历排序后的 vector,对于每个元素,将问题转化为在剩余元素中寻找两个数,使得它们的和等于 s 减去当前元素的值。对于每一次转化后的两数和问题,使用 fun 函数来求解。

4. fun 函数接收起始位置 st、结束位置 ed、目标和 k 以及排序后的 vector 作为参数,使用双指针法在指定区间内寻找两数和等于目标和的情况。如果找到满足条件的两个数,将 ok 标记置为 true,并输出当前元素以及找到的两个数在原数组中的下标,然后跳出循环。

5.如果在遍历完所有可能的组合后都没有找到满足条件的三个数,最后输出 "IMPOSSIBLE"。

代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,s,a;
bool ok=false;
void fun(int st,int ed,int k,vector<pair<int,int>>&v){int l=st,r=ed;while(l<r){if(v[l].first+v[r].first==k){ok=true;cout<<v[st-1].second<<" "<<v[l].second<<" "<<v[r].second;break;}else if(v[l].first+v[r].first<k){l++;}else{r--;}}
}
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n>>s;vector<pair<int,int>>v;for(int i=0;i<n;i++){cin>>a;v.push_back({a,i+1});}sort(v.begin(),v.end());for(int i=0;i<n-2;i++){fun(i+1,n-1,s-v[i].first,v);if(ok){return 0;}}cout<<"IMPOSSIBLE";return 0;
}
http://www.dtcms.com/a/321880.html

相关文章:

  • 全面了解selenium
  • RSA非对称加密
  • 除了腾讯会议,私有化有哪些选择?
  • 安科瑞EMS3.0源网荷储一体化解决方案 全面助力零碳园区建设
  • FreeSWITCH parse-all-invite-headers
  • 记一次lombok链式调用引发EasyExcel兼容性的问题
  • 记录网站突然报错503
  • 第六章第四节 PWM驱动LED呼吸灯 PWM驱动舵机 PWM驱动直流电机
  • 计算机网络:到底什么是可变长子网掩码VLSM?
  • win11中Qt5.14.0+msvc2019+opencv4.9配置
  • 全方位无限随机地图实现指南
  • 模块 PCB 技术在未来通信领域的创新突破方向
  • Docker 创建镜像错误记录
  • Java技术栈/面试题合集(21)-Docker篇
  • 如何动态执行 JS 脚本
  • 揭秘Java synchronize:轻量级锁升级与偏向锁
  • Java-注解
  • 重新 mybatis plus 的 撒着OrUpdate 方法,实现根据自定义字段插入或者修改
  • P1044 [NOIP 2003 普及组] 栈
  • B4263 [GESP202503 四级] 荒地开垦 题解
  • 【工作笔记】Docker Desktop一直转圈加载不出来然后报错
  • 提升LLM服务效率的秘密武器——vLLM!
  • Docker 安装 Redis
  • 机柜中不同类型板卡的操作系统配置情况一览
  • 解决苍穹外卖项目中 MyBatis - Plus 版本冲突问题
  • 【Linux运维】深入理解Cookie与Session机制:安全性与性能的平衡艺术
  • SAP接口日志查询
  • 多级缓存架构:新品咖啡上线引发的数据库压力风暴与高并发实战化解方案
  • 数据返回后需要刷新才会展示的解决方法
  • Vue3 组合式API