[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
- 二重循环+二分 O(N^2LogN)
- #include <iostream>
- #include <stdio.h>
- #include <algorithm>
- using namespace std;
- int a[];
- bool binary_find(int l, int r, int x)
- {
- while (l <= r) {
- int m = (l+r)>>;
- if (a[m] > x)
- r = m - ;
- else if (a[m] < x)
- l = m + ;
- else
- return ;
- }
- return ;
- }
- int main()
- {
- //freopen("1.txt", "r", stdin);
- int n;
- scanf("%d", &n);
- for (int i = ; i < n; i++)
- scanf("%d", &a[i]);
- sort(a, a+n);
- int flag = ;
- for (int i = ; i < n; i++) {
- for (int j = i+; j < n; j++) {
- int x = -(a[i]+a[j]);
- // printf("%d %d %d\n", a[i], a[j], x);
- if (binary_find(j+, n-, x)) {
- printf("%d %d %d\n", a[i], a[j], x);
- flag = ;
- }
- }
- }
- if (!flag) printf("No Solution\n");
- return ;
- }
更快的二分 同时搜索两个数
- #include <iostream>
- #include <stdio.h>
- #include <algorithm>
- using namespace std;
- int a[];
- int main()
- {
- //freopen("1.txt", "r", stdin);
- int n;
- scanf("%d", &n);
- for (int i = ; i < n; i++)
- scanf("%d", &a[i]);
- sort(a, a+n);
- int flag = ;
- for (int i = ; i < n; i++) {
- int j, k, x;
- j = i+;
- k = n-;
- while (j < k) {
- x = a[i]+a[j]+a[k];
- if (x < )
- j++;
- else if (x > )
- k--;
- else {
- printf("%d %d %d\n", a[i], a[j], a[k]);
- flag = ;
- j++; k--;
- }
- }
- }
- if (!flag) printf("No Solution\n");
- return ;
- }
[51nod] 1090 3个数和为0 暴力+二分的更多相关文章
- 51Nod 1090 3个数和为0(暴力)
1090 3个数和为0 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括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] 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——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 ...
随机推荐
- Spring事务管理API
- Linux实战教学笔记52:GlusterFS分布式存储系统
一,分布式文件系统理论基础 1.1 分布式文件系统出现 计算机通过文件系统管理,存储数据,而现在数据信息爆炸的时代中人们可以获取的数据成指数倍的增长,单纯通过增加硬盘个数来扩展计算机文件系统的存储容量 ...
- C#给图片加文字水印
public class TxtWaterMark { public enum WaterPositionMode { LeftTop,//左上 LeftBottom,//左下 RightTop,// ...
- $(window).load()和$(document).ready()
一.前言 我们在编写前端代码的js文件时,往往是会先写一个$(function(){}),然后才会在大括号里面继续写我们自己的代码.当时并不能理解为什么要添加这样一个东西,只是把它当做一个标签一样添加 ...
- Mac shell使用技巧总结(转)
1.文件操作 常用目录 /Systme/Library/Extensions // 驱动所在目录 /User/XXX/Desktop // 桌面目录 资源库 chflags nohidden ~/Li ...
- 对比Nginx配置文件差异
一.概要: Python2 官方文档:https://docs.python.org/2/library/difflib.html Python2 官方文档:https://docs.python.o ...
- SpringBoot与Shiro的整合(单体式项目)
1.包结构 2.jar包,配置文件,类 2.1pom.xml文件配置 <?xml version="1.0" encoding="UTF-8"?> ...
- VisualVM远程连接Tomcat(转)
转自:http://www.cnblogs.com/sunshine-2015/p/5547128.html VisualVM VisualVm是一个将很多JDK命令工具可视化的windows程序,直 ...
- 面向对象的JavaScript-005-Function.prototype.call()的3种作用
1. // call的3种作用 // 1.Using call to chain constructors for an object function Product(name, price) { ...
- [GO]文件的收发服务器
发送方 package main import ( "fmt" "os" "net" "io" ) //发送文件内容 f ...