首页 > 其他分享 >6308: 和为给定数 二分

6308: 和为给定数 二分

时间:2023-08-22 15:22:30浏览次数:35  
标签:二分 int mid 整数 6308 定数 id

描述

 

给出若干个整数,询问其中是否有一对数的和等于给定的数。

 

输入

 

第一行是整数n(0 < n ≤ 100,000),表示有n个整数。

第二行是n个整数。整数的范围是在0到108之间。

第三行是一个整数m(0≤m≤230),表示需要得到的和。

 

 

输出

 

若存在和为m的数对,输出两个整数,小的在前,大的在后,中间用单个空格隔开。若有多个数对满足条件,选择数对中较小的数更小的。若找不到符合要求的数对,输出一行No。

 

样例输入

 

4
2 5 1 4
6

样例输出

 1 5   似乎对二分有个误区,正确的二分代码应该是当中间数 a[mid] >= 给定数x时,我们用右区间r直接等于mid,另一个则缩小左区间
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5+10,inf = 0x3f3f3f3f;
int a[N];
int find(int x,int l,int r)
{
    while(l<r)
    {
        int mid = (l+r) / 2;
        if(a[mid] >= x)r = mid;
        else l = mid + 1;
    }
    return r;
}
int main()
{
    ll n,m;
    cin >> n;
    for(int i = 1;i <= n;i++)
        scanf("%d",&a[i]);
    cin >> m;
    sort(a + 1, a + 1 + n);
    int f = 0;
    for(int i = 1;i < n;i++)
    {
        int id = find(m - a[i],i,n);
        if(a[id] == m - a[i] && id != i)
        {
            printf("%d %d\n",a[i],a[id]);
            return 0;
        }
    }
    cout << "No";
     return 0;
}

 

标签:二分,int,mid,整数,6308,定数,id
From: https://www.cnblogs.com/jyssh/p/17648606.html

相关文章

  • 二分查找法(折半查找)
    二分查找法是一种在有序数组中查找特定元素的算法。为了理解它的工作原理,我们需要知道数组是有序的,也就是说,数组中的元素按照升序或降序排列。二分查找法的基本步骤如下:选择数组的中间元素。如果中间元素正好是目标值,则搜索结束。如果目标值大于中间元素,则只需在数组的......
  • 二分图笔记
    二分图定义二分图是一张无向图,可以分成\(2\)个集合\(A\)和\(B\)。在同一个集合中的点没有边相连。二分图判定当且仅当图中不存在奇数环时,该图为二分图。证明:反证法,构造一个奇数环。容易发现无论如何都不可能使相邻\(2\)点分到\(2\)个集合。那么很容易想到一个判定二......
  • 【算法】二分查找实现过程
    1、二分查找的基本思想是,要查找的值和整个数组序列的中间值做比较,确认该值在其中一半里,只要在数组序列一半中继续搜索。2、采用二分查找方法的前提条件是数组或线性表中元素必须按照大小有序排列。代码如下,intmain(){ intarr[]={1,2,3,4,5,6,7,8,9,10}; intk=7......
  • AcWing 861. 二分图的最大匹配
    题目给定一个二分图,其中左半部包含$n_1$个点(编号$1∼n_1$),右半部包含$n_2$个点(编号$1∼n_2$),二分图共包含$m$条边。数据保证任意一条边的两个端点都不可能在同一部分中。请你求出二分图的最大匹配数。二分图的匹配:给定一个二分图$G$,在$G$的一个子图$M$中,$M$的边集......
  • 二分答案专题
    T1包裹快递题目描述一个快递公司要将\(n\)个包裹分别送到\(n\)个地方,并分配给邮递员小K一个事先设定好的路线,小K需要开车按照路线给的地点顺序相继送达,且不能遗漏一个地点。小K得到每个地方可以签收的时间段,并且也知道路线中一个地方到下一个地方的距离。若到达某一......
  • 选择冒泡插入排序 异或 二分 对数器
    算法时间复杂度O(x)空间复杂度O(x)数据状况是否影响时间复杂度表现选择排序n21否冒泡排序n21否插入排序n21是(最好情况下O(N))1.选择排序:遍历找出0~n-1最小的数放在0位置,遍历找出1~n-1最小的数放在1位置时间复杂度O(n2) 空间复杂度O(1)voidswap(vector<int>&nums,inti,intj......
  • 二分搜索法-C++
    二分法,就是对一个数组中,已经排好序的数字进行搜索。使用二分法的前提条件:1.是一个数组2.该数组中的数字已经是有序的,比如升序的数字或者降序的数字都可以。inta[]={1,2,3,4};   intb[]={4,3,2,1};3.该数组中没有出现重复的数字 二分法原理:就是对一个数组,不断的划分......
  • AcWing 860. 染色法判定二分图
    题目给定一个$n$个点$m$条边的无向图,图中可能存在重边和自环。请你判断这个图是否是二分图。输入格式第一行包含两个整数$n$和$m$。接下来$m$行,每行包含两个整数$u$和$v$,表示点$u$和点$v$之间存在一条边。输出格式如果给定图是二分图,则输出Yes,否则输出No......
  • 二分图
    定义一张无向图,如果可以将节点分成两个部分,使得两个部分内部没有任何边相连,也就是每条边的端点都分属两个部分,就可以说这张图为二分图。判定当且仅当图中不存在长度为奇数的环时,这一张图为二分图。因为显然每经过一条边都会到达另一个部分,以此类推,经过奇数条边后比不可能还在......
  • 二分图浅学
    前言:由于NOI大纲中对二分图的要求仅停留在判定,所以本文主要讲解二分图染色。二分图指:一张图可以分成两个集合,使得两个集合内部没有边相连,边在两个集合之间。判定二分图的充要条件是:不存在奇环。那么我们可以对于整张图交替染色,如果发现矛盾,存在奇环;否则说明不存在奇环。其实......