题目描述 Description

给出若干个整数,询问其中是否有一对数的和等于给定的数。
 输入输出格式 Input/output
输入格式:
共三行:
第一行是整数n(0 < n <= 100,000),表示有n个整数。
第二行是n个整数。整数的范围是在0到10^8之间。
第三行是一个整数m(0 <= m <= 2^30),表示需要得到的和。
输出格式:
若存在和为m的数对,输出两个整数,小的在前,大的在后,中间用单个空格隔开。若有多个数对满足条件,选择数对中较小的数更小的。若找不到符合要求的数对,输出一行No。

 输入输出样例 Sample input/output
样例测试点#1

输入样例:

4

2 5 1 4

6

输出样例:

1 5

思路:这题用二分查找最快,先把数组从小到大排序(我这用的是快排,目的是为了满足题目条件中的"若有多个数对满足条件,选择数对中较小的数更小的")

代码如下:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int fun(const void *a,const void *b)
 4 {
 5     return *(int*)a-*(int*)b;
 6 }
 7 int main()
 8 {
 9     int n,a[100002],m;
10     int i,l;
11     int r,mid;
12     scanf("%d",&n);
13     for(i=1;i<=n;i++)
14     {
15         scanf("%d",&a[i]);
16     }
17     qsort(a+1,n,sizeof(int),fun);//选出小的更小
18     scanf("%d",&m);
19     for(i=1;i<=n;i++)
20     {
21         l=i+1;//左
22         r=n;//右
23         while(l<=r)
24         {
25             mid=(l+r)/2;
26             if(a[mid]==m-a[i]) break;//找到了
27             else if(a[mid]>m-a[i]) r=mid-1;//中间大于,右往左移
28             else l=mid+1;//否则左边右移
29         }
30         if(a[mid]==m-a[i])//输出结果
31         {
32             printf("%d %d\n",a[i],m-a[i]);
33             return 0;
34         }
35     }
36     printf("No\n");//没有
37     return 0;
38 }

转载于:https://www.cnblogs.com/geek-007/p/5667447.html

Openjudge-NOI题库-和为给定数相关推荐

  1. OpenJudge NOI题库 1.4 编程基础之逻辑表达式与条件分支

    OpenJudge NOI题库 1.4 编程基础之逻辑表达式与条件分支 OpenJudge - OpenJudge - 题目 啊哈C语言 第11讲 4.1.4_01判断数正负 啊哈C语言 第11讲 4 ...

  2. OpenJudge NOI题库 1.5编程基础之循环控制

    OpenJudge NOI题库 1.5编程基础之循环控制 OpenJudge - OpenJudge - 题目 1.5_01求平均年龄 1.5_01求平均年龄_哔哩哔哩_bilibili 1.5_02 ...

  3. OpenJudge NOI题库 1.7 编程基础之字符串

    OpenJudge NOI题库 1.7 编程基础之字符串 OpenJudge - OpenJudge - 题目 1.7_01统计数字字符个数 1.7_01统计数字字符个数_哔哩哔哩_bilibili ...

  4. OpenJudge NOI题库 1.1 编程基础之输入输出

    OpenJudge NOI题库 1.1编程基础之输入输出 OpenJudge - OpenJudge - 题目 1.1_01:Hello, World!_2017-03-19(C++语言) 1.1_0 ...

  5. Openjudge NOI题库1.7编程基础之字符串 34:回文子串

     总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个字符串,输出所有长度至少为2的回文子串. 回文子串即从左往右输出和从右往左输出结果是一样的字符串,比如:abba,cccde ...

  6. Openjudge NOI题库1.11编程基础之二分查找04 网线管理

    总时间限制:  1000ms  内存限制:  65536kB 描述 仙境的居民们决定举办一场程序设计区域赛.裁判委员会完全由自愿组成,他们承诺要组织一次史上最公正的比赛.他们决定将选手的电脑用星形拓扑 ...

  7. Openjudge NOI题库 ch0111/04 网线管理

    这篇主要是讲讲细节 总时间限制: 1000ms 内存限制: 65536kB 描述 仙境的居民们决定举办一场程序设计区域赛.裁判委员会完全由自愿组成,他们承诺要组织一次史上最公正的比赛.他们决定将选手的 ...

  8. Openjudge NOI题库 ch0111/10 河中跳房子|NOIP2015 day2 stone

    这题同时也是NOIP2015 D2T1 跳石头 stone 原题. 总时间限制: 1000ms 内存限制: 65536kB 描述 每年奶牛们都要举办各种特殊版本的跳房子比赛,包括在河里从一个岩石跳到另 ...

  9. OpenJudge NOI题库1.1答案

    我是一位编程爱好者,大家可以看我的代码进行学习,这些代码都是通过测试的.(仅供参考) 01.Hello, World! #include<bits/stdc++.h> using name ...

最新文章

  1. 设计模式笔记之十四 (命令模式)
  2. python生成器应用中的一个要点
  3. 使用rman本机复制新数据库
  4. C#面向对象--命名空间
  5. pytorch:tensor的运算
  6. 在线开关MySQL5.7 GTID_MySQL 5.7 在线启用和关闭GTID
  7. 数学建模比赛需要那些c语言的知识,数学建模需要掌握哪些编程语言和技术
  8. LibFetion 应用程序
  9. PWA系列 - Web Push 技术
  10. Matlab R2017a启动时初始化过程时间太长解决办法
  11. 短视频的海绵宝宝配音怎么制作?这可能是最容易上手的配音教程
  12. 让Atmega8A-PU 支持外部晶振的熔丝设置
  13. 串口调试小节之五 串口参数设置查询
  14. Win11系统打开电脑磁盘显示磁盘错误无法打开怎么办?
  15. u盘中Trojan.Generic病毒
  16. 【EI会议】2022年人工智能与统计学前沿国际会议(CFAIS 2022)
  17. Docker与自动化部署
  18. spring.log
  19. 面试展示:CRM项目客户管理模块展示
  20. 华为android能用几年,华为手机能用几年 一般智能手机能用多少年

热门文章

  1. 什么叫组网_5G中,啥是独立组网(SA)与非独立组网(NSA)
  2. 分享丨10年DBA老司机整理的Oracle学习路线图
  3. “敏捷版”全链路压测
  4. ALB Ingress 发布,轻松应对云原生应用流量管理
  5. Serverless 工程实践 | Serverless 应用优化与调试秘诀
  6. mysql ef 分布式事务_分布式事务系列--分布式跨库查询解决方案 mysql federated引擎的使用...
  7. h5手机端浏览器机制_H5测试介绍
  8. 恩施软件开发人员每月多少钱_恩施建个大棚多少钱搭建、养猪大棚价格
  9. linux用不用装固态硬盘驱动,固态硬盘要不要安装驱动?总算弄明白了
  10. opencv:读取、保存操作函数