51nod 1090 3个数和为0【二分】
第1行,1个数N,N为数组的长度(0 <= N <= 1000)
第2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9)
如果没有符合条件的组合,输出No Solution。
如果有多个,按照3个数中最小的数从小到大排序,如果最小的数相等则继续按照第二小的数排序。每行3个数,中间用空格分隔,并且这3个数按照从小到大的顺序排列。
7
-3
-2
-1
0
1
2
3
-3 0 3
-3 1 2
-2 -1 3
-2 0 2
-1 0 1 【分析】:直接枚举两个数,二分查找第三个数就行了。由于题中要求按数的大小排序输出,所以直接sort升序输出即可,这样即可用二分查找第三个数,即-a[i]-a[j],并且一定比a[i]和a[j]大,复杂度为n^2log(n);
【代码】:
#include <bits/stdc++.h> using namespace std; const int maxn = +;
int n;
int a[maxn]; int check(int x)
{
int l=,r=n-;
while(l<=r)
{
int mid=(l+r)>>;
if(a[mid]==x)
return ;
if(a[mid]<x)
l=mid+;
else
r=mid-;
}
return ; }
int main()
{
int ans;
int flag=; cin>>n;
for(int i=;i<n;i++)
cin>>a[i];
sort(a,a+n);
for(int i=;i<n;i++)
{
for(int j=i+;j<n;j++)
{
int ans=-a[i]-a[j];
if(ans<=a[j])
break;
if(check(ans))
{
cout<<a[i]<<" "<<a[j]<<" "<<ans<<endl;
flag=;
} }
}
if(!flag)
cout<<"No Solution"<<endl;
return ;
}
二分
#include <bits/stdc++.h> using namespace std;
const int maxn = +;
int main()
{
int n;
int flag=;
int a[maxn];
cin>>n;
for(int i=;i<n;i++)
cin>>a[i];
sort(a,a+n);
for(int i=;i<n;i++)
{
for(int j=i+;j<n;j++)
{
if(a[i]+a[j]<=)
{
for(int k=j+;k<n;k++)
{
if(a[i]+a[j]+a[k]==)
{
cout<<a[i]<<" "<<a[j]<<" "<<a[k]<<endl;
flag=;
}
}
}
}
}
if(flag)
cout<<"No Solution"<<endl;
return ;
}
暴力枚举+剪枝
51nod 1090 3个数和为0【二分】的更多相关文章
- 51Nod 1090 3个数和为0(暴力)
1090 3个数和为0 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从 ...
- 51Nod 1090 3个数和为0 set 二分优化
给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从中找出所有和 = 0的3个数的组合.如果没有这样的组合,输出No Solution.如果有多个,按照3个数中最小的数从小到 ...
- [51nod] 1090 3个数和为0 暴力+二分
给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从中找出所有和 = 0的3个数的组合.如果没有这样的组合,输出No Solution.如果有多个,按照3个数中最小的数从小到 ...
- 51Nod 1267 4个数和为0 二分
给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No".Input第1行,1个数N,N为数组的长度(4 <= ...
- 51Nod 1090 3个数和为0
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1090 思路:排序 三个for循环 但是要控制循环 不能从头开 ...
- 51nod 1267 4个数和为0
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出&qu ...
- [51nod] 1267 4个数和为0 暴力+二分
给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No". Input 第1行,1个数N,N为数组的长度(4 < ...
- 1001 数组中和等于K的数对 1090 3个数和为0
二分查找.对数组每个V[i],在其中查找K-V[i],查找完成后修改v[i]避免重复输出 #include<iostream> #include<algorithm> #inc ...
- 51nod——T1267 4个数和为0
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1267 题目描述 给出N个整数,你来判断一下是否能够选出4个数,他们的和 ...
随机推荐
- 通过学习制作长微博工具来了解水印的制作,及EditText中的内容在图片中换行显示
长微博工具非常有用,140字的要求可能阻止你写更多的内容,于是长微博工具应运而生,虽然网上有很多长微博工具,但是我都不是很满意,所以自己想做一个,通过做这个长微博工具,我学习到了很多东西,有两个难点, ...
- fix34
public int[] fix34(int[] nums) { int i3=0; int i4=0; int temp=0; while( (i3<nums.length)&& ...
- python基础实践(三)
-*-列表是新手可直接使用的最强大的python功能之一,它融合了众多重要的编程概念.-*- # -*- coding:utf-8 -*-# Author:sweeping-monkQuestion_ ...
- java实现最大堆
优先队列 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有最高级先出 (first in, ...
- HDU 4750 Count The Pairs (离线并查集)
按边从小到大排序. 对于每条边(from, to, dist),如果from和to在同一个集合中,那么这条边无意义,因为之前肯定有比它更小的边连接了from和to. 如果from和to不属于同一个集合 ...
- JavaWeb笔记(八)JQuery
三个版本 1.x:兼容 ie678,使用最为广泛的,官方只做BUG维护, 功能不再新增.因此一般项目来说,使用1.x版本就可以了 最终版本:1.12.4 2.x:不兼容ie678,很少有人使用,官方只 ...
- htmlagilitypack解析html
这是个很好的的东西,以前做Html解析都是在用htmlparser,用的虽然顺手,但解析速度较慢,碰巧今天找到了这个,就拿过来试,一切出乎意料,非常爽,推荐给各位使用. 下面是一些简单的使用技巧,希望 ...
- 想玩API,这些套路我来告诉你!
小伙伴是不是时常听说各种api接口的问题呢,可能许多人第一感觉:那是什么个玩意儿,那么多人回去研究它,今天思梦PHP小编就来为你揭开他的神秘的面纱,先看一下百度百科上面的官方的解释: 其实说白了就是为 ...
- [洛谷P4726]【模板】多项式指数函数
题目大意:给出$n-1$次多项式$A(x)$,求一个 $\bmod{x^n}$下的多项式$B(x)$,满足$B(x) \equiv e^{A(x)}$. 题解:(by Weng_weijie) 泰勒展 ...
- [洛谷P4656][CEOI2017]Palindromic Partitions
题目大意:一个长度为$n$的字符串,要求把它分成尽可能多的小块,使得这些块构成回文串 题解:贪心,从两边从找尽可能小的块使得左右的块相等,判断相等可以用$hash$ 卡点:无 C++ Code: #i ...