博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PAT A1048 二分/two points
阅读量:5985 次
发布时间:2019-06-20

本文共 1296 字,大约阅读时间需要 4 分钟。

clipboard.png

简单的一道题,想到的有两种方法

方法一:二分查找;

由于是两个数和,所以我们从i=1开始枚举,在剩下的i+1~n序列中找到m-a[i]的数,是一个递增不重复序列的查找问题,之前二分法总结过,所以不再赘述;
代码如下:

#include
#include
#include
#include
using namespace std;const int maxn=100010;int coin[maxn];int n,m;int binarySearch(int l,int r,int x){ while(l<=r){ int mid=(l+r)/2; if(coin[mid]==x) return mid; else if(coin[mid]>x){ r=mid-1; }else{ l=mid+1; } } return -1;}int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("%d",&coin[i]); } int a,b; int r=-1; sort(coin+1,coin+n+1); for(int i=1;i

第二种方法:two points;

注意的点是避免i=j使得重复加同一个值从而导致错误答案;

#include
#include
#include
#include
using namespace std;const int maxn=100010;int coin[maxn];int n,m;int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("%d",&coin[i]); } int a,b; int r=-1; sort(coin+1,coin+n+1); int i=1,j=n; int sum; bool flag=false; while(i
m){ j--; }else{ i++; } } if(!flag){ printf("No Solution\n"); }else{ printf("%d %d",coin[i],coin[j]); } system("pause"); return 0;}

转载地址:http://hvylx.baihongyu.com/

你可能感兴趣的文章
类的特性-封装
查看>>
MVC中的扩展点(四)控制器工厂
查看>>
TSC工业型条码打印机的价格的影响因素有哪些呢?
查看>>
mac上xcode4和xcode5共存及修改默认打开方式
查看>>
[Winform]关于cefsharp触屏设备长按文本内容,崩溃问题的修复
查看>>
第七次作业--项目需求分析(团队)
查看>>
循环群的子群是循环群
查看>>
远程管理软件
查看>>
C# 中的委托和事件
查看>>
其它综合-企业级CentOS 7.6 操作系统的安装
查看>>
第五周-周记
查看>>
LightTable的结构(二)
查看>>
linux高级编程day08 笔记
查看>>
PYTHON3.day01RE
查看>>
由浅到深理解java反射
查看>>
linux 下 apache启动、停止、重启命令
查看>>
转-基于NodeJS的14款Web框架
查看>>
Java---变量与常量
查看>>
Struts2注解学习1
查看>>
Oracle11gr2 Linux
查看>>