51Nod 1090 3个数和为0 set 二分优化
给出一个长度为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 二分优化的更多相关文章
- 51nod 1090 3个数和为0【二分】
1090 3个数和为0 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从 ...
- [51nod] 1090 3个数和为0 暴力+二分
给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从中找出所有和 = 0的3个数的组合.如果没有这样的组合,输出No Solution.如果有多个,按照3个数中最小的数从小到 ...
- 51Nod 1090 3个数和为0(暴力)
1090 3个数和为0 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从 ...
- 51Nod 1090 3个数和为0
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1090 思路:排序 三个for循环 但是要控制循环 不能从头开 ...
- [51nod] 1267 4个数和为0 暴力+二分
给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No". Input 第1行,1个数N,N为数组的长度(4 < ...
- 51nod——T1267 4个数和为0
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1267 题目描述 给出N个整数,你来判断一下是否能够选出4个数,他们的和 ...
- 1001 数组中和等于K的数对 1090 3个数和为0
二分查找.对数组每个V[i],在其中查找K-V[i],查找完成后修改v[i]避免重复输出 #include<iostream> #include<algorithm> #inc ...
- 51Nod 1267 4个数和为0 二分
给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No".Input第1行,1个数N,N为数组的长度(4 <= ...
- 51nod 1267 4个数和为0
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出&qu ...
随机推荐
- LeetCode 283. Move Zeroes (移动零)
Given an array nums, write a function to move all 0's to the end of it while maintaining the relativ ...
- js日期倒计时效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 关于EsayUI中datagrid重复提交后台查询数据的问题
直接上代码: <table id="XXXX" style="width:100%;height:100%;" class="easyui-da ...
- swift 之 mustache模板引擎
用法: Variable Tags {{name}} 用来渲染值name datas: let data = ["value": "test"] ------- ...
- 面试题----寻找比一个N位数大的“下”一个数
题目描述 写出一个算法,实现如下功能: 给定一个N位数字组成的数,找出比这个数大的由相同数字组成的下一个数 例如:如果数字为 25468, 则结果为25486 如果数字为 21765, 则结果为 25 ...
- Maple trees(最小覆盖圆)
Maple trees Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- 用正则表达式(regex)匹配多项式(polynomial)
因为作业的要求,我需要识别用户从命令行输入的多项式,并且要提取出其中的系数.指数以便用于后续计算. 曾经想过用一个数组把用户所有的输入全部存进来,然后在写逻辑判断.但想想那复杂的逻辑,头皮都发麻,这时 ...
- SQL——按照季度,固定时间段,分组统计数据
最近在工作中接到了一个需求,要求统计当月以10天为一个周期,每个周期的数据汇总信息.假设有一张表如下: 表table_test中 ID AMOUNT CREATE_ ...
- Nginx详解以及LNMP的搭建
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- struts2+spring3+hibernate3+mysql简单登录实现
1.导入相关的jar包 2.建立数据库 1 create table account( 2 id int(10), 3 user varchar(50), 4 paw varchar(50) 5 ); ...