当前位置: 首页 > 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.lryc.cn/news/614739.html

相关文章:

  • 基于MATLAB实现的毫米波大规模MIMO系统中继混合预编码设计
  • Python Day26 HTTP 协议相关笔记
  • Neo4j APOC插件安装教程
  • 论文阅读:AAAI 2024 ExpeL: LLM Agents Are Experiential Learners
  • 连锁店管理系统的库存跟踪功能:数字化转型下的零售运营核心
  • Nextcloud容器化部署新范式:Docker与Cpolar如何重塑私有云远程访问能力
  • 浅试A2A
  • 商品 SKU 计算,库存不足不能选择
  • SpringBoot的profile加载
  • C++ 模拟实现 map 和 set:掌握核心数据结构
  • 恒科持续低迷:新能源汽车股下跌成拖累,销量担忧加剧
  • Mac下安装Conda虚拟环境管理器
  • AI开发平台行业全景分析与战略方向建议
  • WPF 动画卡顿
  • Seaborn 数据可视化库:入门与进阶指南
  • 解决多线程安全性问题的方法
  • 无人设备遥控器之信号编码技术篇
  • 深入理解OpenGL Shader与GLSL:基础知识与优势分析
  • 【深度学习】动手深度学习PyTorch版——安装书本附带的环境和代码(Windows11)
  • list的简单介绍
  • 大厂求职 | 唯品会2026校园招聘正式启动!
  • “鱼书”深度学习进阶笔记(1)第二章
  • 微信小程序功能 表单密码强度验证
  • NOIP 2024 游记
  • [激光原理与应用-185]:光学器件 - BBO、LBO、CLBO晶体的全面比较
  • LoRA微调的代码细节
  • 2025年渗透测试面试题总结-07(题目+回答)
  • 【设计模式】访问者模式模式
  • Chrome DevTools Protocol 开启协议监视器
  • flutter开发(一)flutter命令行工具