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

Sum of Four Values(sorting and searching)

题目描述

You are given an array of n integers, and your task is to find four values (at distinct positions) whose sum is x.

输入

The first input line has two integers n and x: the array size and the target sum.
The second line has n integers a1,a2,...,an: the array values.
Constraints
1 ≤ n ≤ 1000
1 ≤ x,ai ≤ 10^9

输出

Print four integers: the positions of the values. If there are several solutions, you may print any of them. If there are no solutions, print IMPOSSIBLE.

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

4-sum问题。

3-sum问题是一层循环+双指针,而4-sum问题是双层循环+双指针。

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

2.对 vector 按照元素值进行排序,这样方便后续使用双指针法,以及避免不必要的遍历。

3.第一层循环(0~n-4):遍历排序后的 vector,对于每个元素,将问题转化为在剩余元素中寻找三个数,使得它们的和等于 x 减去当前元素的值。

4.第二层循环(j从i+1~n-3):遍历 vector,对于每个元素,将问题转化为在剩余元素中寻找两个数,使得它们的和等于 x 减去当前两个元素的值。对于每一次转化后的两数和问题,使用双指针来求解。

5. 双指针求解两数和问题:区间为[j+1,n-1]。如果找到满足条件的两个数,输出当前四个元素在原数组中的下标,然后终止程序。

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

代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,x,a;
vector<pair<int,int>>v;
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n>>x;for(int i=1;i<=n;i++){cin>>a;v.push_back({a,i});}sort(v.begin(),v.end());for(int i=0;i<n-3;i++){if(v[i].first>=x)break;for(int j=i+1;j<n-2;j++){if(v[i].first+v[j].first>=x)break;int l=j+1,r=n-1;int target=x-v[i].first-v[j].first;while(l<r){if(v[l].first+v[r].first==target){cout<<v[i].second<<" "<<v[j].second<<" "<<v[l].second<<" "<<v[r].second;return 0;}else if(v[l].first+v[r].first<target){l++;}else{r--;}}}}cout<<"IMPOSSIBLE";return 0;
}

http://www.dtcms.com/a/320625.html

相关文章:

  • 力扣-438.找到字符串中所有字母异位词
  • I/O原理与服务。
  • KTH7111-离轴专用芯片,支持自校准,可替MA600和TLE5012,离轴精度可达±0.2
  • Agent配置最佳实践:Prompt工程与参数调优
  • RAG初步实战:从 PDF 到问答:我的第一个轻量级 RAG 系统(附详细项目代码内容与说明)
  • WWDC 25 玻璃态星际联盟:SwiftUI 视图协同“防御协议”
  • 生产管理ERP系统|物联及生产管理ERP系统|基于SprinBoot+vue的制造装备物联及生产管理ERP系统设计与实现(源码+数据库+文档)
  • 2025华数杯数学建模A题【 多孔膜光反射性能的优化与控制】原创论文分享
  • 暴力解决MySQL连接失败
  • 应用层自定义协议
  • Spring系列之Spring AI入门
  • 关于“致命错误:‘https://github.com/....git/‘ 鉴权失败”
  • 基于Vue.js和Golang构建高效在线客服系统:前端实现与后端交互详解
  • Linux学习-数据结构(哈希表)
  • K8s 常见故障案例分析
  • Axure基于中继器实现的组件库(导航菜单、动态表格)
  • k8s调度问题
  • 实战:在已有K8S集群如何新增和删除Node节点
  • 【网络自动化】利用Python脚本与计划任务,实现H3C/HPE设备配置无人值守备份
  • 冰蝎--安装、使用
  • BOM(物料清单)详解:定义、类型、差异与作用
  • 【跨国数仓迁移最佳实践5】MaxCompute近线查询解决方案助力物流电商等实时场景实现高效查询
  • Python 属性描述符(方法是描述符)
  • MySQL 配置性能优化赛:核心策略与实战技巧
  • 新客户 | TDengine 时序数据库是怎么在钢厂“撬动”PI 的?
  • [Flutter] v3.24 AAPT:错误:未找到资源 android:attr/lStar。
  • 详解 Seaborn:让数据可视化更简单高效的 Python 库
  • 使用Python爬虫,selenium能否替代requests?
  • centos出现ping: baidu.com: 未知的名称或服务问题
  • 每日五个pyecharts可视化图表:条形图与关系图