给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等。
从中找出所有和 = 0的3个数的组合。如果没有这样的组合,输出No Solution。
如果有多个,按照3个数中最小的数从小到大排序,如果最小的数相等则按照第二小的数排序。
Input
第1行,1个数N,N为数组的长度(0 <= N <= 1000)
第2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9)
Output
如果没有符合条件的组合,输出No Solution。
如果有多个,按照3个数中最小的数从小到大排序,如果最小的数相等则继续按照第二小的数排序。
每行3个数,中间用空格分隔,并且这3个数按照从小到大的顺序排列。
Input示例
7
-3
-2
-1
0
1
2
3
Output示例
-3 0 3
-3 1 2
-2 -1 3
-2 0 2
-1 0 1
思路:set暴力+优化

1.纯set暴力

 #include <bits/stdc++.h>
using namespace std;
typedef long long ll;
set<int> s,t;
set<int>::iterator it,jt,kt;
int main() {
ios::sync_with_stdio(false);
int n,data,sum=;
cin>>n;
for(int i=;i<=n;++i) {
cin>>data;
s.insert(data);
}
int flag=;
for(it=s.begin();it!=s.end();++it) {
sum=;
sum-=*it;
t=s;
jt=t.find(*it);
jt++;
for(;jt!=t.end();++jt) {
data=sum-*jt;
kt=t.find(data);
if(kt!=t.end()&&(*kt!=*jt)&&(*kt>*jt)) {
cout<<*it<<" "<<*jt<<" "<<*kt<<endl;
flag=;
t.erase(*kt);
}
}
}
if(!flag) cout<<"No Solution"<<endl;
return ;
}

2.set+二分优化

 #include <iostream>
#include <set>
using namespace std;
set<int> s;
set<int>::iterator it,jt,kt;
int main() {
ios::sync_with_stdio(false);
int n,data;
cin>>n;
for(int i=;i<=n;++i) {
cin>>data;
s.insert(data);
}
int flag=;
for(it=s.begin();it!=s.end();++it) {
if(*it>=) break;
jt=it;
jt++;
kt=prev(s.end());
while(*jt<*kt) {
if(*it+*jt+*kt<) {
jt++;
} else if(*it+*jt+*kt>) {
kt--;
} else {
cout<<*it<<" "<<*jt<<" "<<*kt<<endl;
flag=;
jt++;
kt--;
}
}
}
if(!flag) cout<<"No Solution"<<endl;
return ;
}

3.数组 + 二分

 #include <iostream>
#include <algorithm>
using namespace std;
int ans[];
int main() {
ios::sync_with_stdio(false);
int n,flag=;
cin>>n;
for(int i=;i<n;++i) cin>>ans[i];
sort(ans,ans+n);
for(int i=;i<n;++i) {
if(ans[i]>=) break;
int j=i+,k=n-;
while(ans[j]<ans[k]) {
if(ans[i]+ans[j]+ans[k]<) j++;
else if(ans[i]+ans[j]+ans[k]>) k--;
else {
cout<<ans[i]<<" "<<ans[j]<<" "<<ans[k]<<endl;
flag=;
j++;
k--;
}
}
}
if(!flag) cout<<"No Solution"<<endl;
return ;
}

51Nod 1090 3个数和为0 set 二分优化的更多相关文章

  1. 51nod 1090 3个数和为0【二分】

    1090 3个数和为0 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从 ...

  2. [51nod] 1090 3个数和为0 暴力+二分

    给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从中找出所有和 = 0的3个数的组合.如果没有这样的组合,输出No Solution.如果有多个,按照3个数中最小的数从小到 ...

  3. 51Nod 1090 3个数和为0(暴力)

    1090 3个数和为0 基准时间限制:1 秒 空间限制:131072 KB 分值: 5         难度:1级算法题 给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从 ...

  4. 51Nod 1090 3个数和为0

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1090 思路:排序 三个for循环 但是要控制循环 不能从头开 ...

  5. [51nod] 1267 4个数和为0 暴力+二分

    给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No". Input 第1行,1个数N,N为数组的长度(4 < ...

  6. 51nod——T1267 4个数和为0

    https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1267 题目描述 给出N个整数,你来判断一下是否能够选出4个数,他们的和 ...

  7. 1001 数组中和等于K的数对 1090 3个数和为0

    二分查找.对数组每个V[i],在其中查找K-V[i],查找完成后修改v[i]避免重复输出 #include<iostream> #include<algorithm> #inc ...

  8. 51Nod 1267 4个数和为0 二分

    给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No".Input第1行,1个数N,N为数组的长度(4 <= ...

  9. 51nod 1267 4个数和为0

    基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出&qu ...

随机推荐

  1. Java基础-Eclipse环境搭建(02)

    Eclipse工具 IDE(Integrated Development Environment)集成开发环境集成了编写功能,分析功能,编译功能一体化的开发软件. 调试功能等,其中编译在保存时运行(即 ...

  2. Apache常用配置

    Apache配置文件:conf/httpd.conf.(注意:表示路径时使用‘/’而不使用‘\’,注释使用‘#’) 1. ServerRoot:服务器根目录,也就是Apache的安装目录,其他的目录配 ...

  3. 进程,线程,GIL,Python多线程,生产者消费者模型都是什么鬼

    1. 操作系统基本知识,进程,线程 CPU是计算机的核心,承担了所有的计算任务: 操作系统是计算机的管理者,它负责任务的调度.资源的分配和管理,统领整个计算机硬件:那么操作系统是如何进行任务调度的呢? ...

  4. 批量查询sql脚本

    远程批量查询sql脚本 for i in {1..50} do sql_ip=172.168.0.${i}   information=`mysql -h ${sql_ip} -uroot -ppas ...

  5. chromium源码阅读--进程间通信(IPC)

    第一篇就有提到Chromium是目前默认是采用多进程架构,当然,chromium有singe-process的版本. 多进程与多线程的区别,确实有很多可以讲的,我的另一篇博客也讲了一些,这里是从浏览器 ...

  6. 使用OpenCV训练Haar like+Adaboost分类器的常见问题

    <FAQ:OpenCV Haartraining>——使用OpenCV训练Haar like+Adaboost分类器的常见问题 最近使用OpenCV训练Haar like+Adaboost ...

  7. 操作系统--进程管理1--单个CPU情况

    1.进程概念 进程:一个正在执行的程序:操作系统提出进程概念目的:是为了跟踪程序在执行期间的状态.而程序只是一段代码,是一个静态的概念 无法准确描述程序执行时候发生的一切.程序代码被加载进内存后就以进 ...

  8. linux下使用crontab实现定时PHP计划任务失败的原因分析

    这篇文章主要介绍了linux下使用crontab实现定时PHP计划任务失败的原因分析,需要的朋友可以参考下   很多人在linux下使用crontab实现PHP执行定时任务却未能成功,不能生成缓存.本 ...

  9. 暑假练习赛 007 B - Weird Cryptography

    Weird Cryptography Description standard input/outputStatements Khaled was sitting in the garden unde ...

  10. [译]ASP.NET Core 2.0 部分视图

    问题 如何在ASP.NET Core 2.0中使用部分视图来重用页面的公共部分? 答案 新建一个空项目,在Startup中添加MVC服务和中间件: public void ConfigureServi ...