51nod 1001 数组中和等于K的数对
2016-05-26 23:36
232 查看
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1001
题目:给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对。例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9),(0,8),(2,6),(3,5)。
直接排序,然后对二分找k-a[I]即可。
#include <iostream>
#include<bits/stdc++.h>
#define LL long long
using namespace std;
int n,k;
LL a[55000];
int _find(LL x)
{
int l=0,r=n-1;
while(l<=r)
{
int mid=(r+l)>>1;
if(a[mid]==x) return 1;
if(a[mid]<x) l=mid+1;
else r=mid-1;
}
return 0;
}
int main()
{
scanf("%d%d",&k,&n);
for(int i=0;i<n;i++)
scanf("%lld",&a[i]);
sort(a,a+n);
int flag=0;
for(int i=0;i<n;i++)
{
if(a[i]>=k/2) break;
if(_find(k-a[i]))
{
flag=1;
cout<<a[i]<<" "<<k-a[i]<<endl;
}
}
if(!flag) cout<<"No Solution"<<endl;
}
题目:给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对。例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9),(0,8),(2,6),(3,5)。
直接排序,然后对二分找k-a[I]即可。
#include <iostream>
#include<bits/stdc++.h>
#define LL long long
using namespace std;
int n,k;
LL a[55000];
int _find(LL x)
{
int l=0,r=n-1;
while(l<=r)
{
int mid=(r+l)>>1;
if(a[mid]==x) return 1;
if(a[mid]<x) l=mid+1;
else r=mid-1;
}
return 0;
}
int main()
{
scanf("%d%d",&k,&n);
for(int i=0;i<n;i++)
scanf("%lld",&a[i]);
sort(a,a+n);
int flag=0;
for(int i=0;i<n;i++)
{
if(a[i]>=k/2) break;
if(_find(k-a[i]))
{
flag=1;
cout<<a[i]<<" "<<k-a[i]<<endl;
}
}
if(!flag) cout<<"No Solution"<<endl;
}
相关文章推荐
- Android布局为,Fragment,ScrollView,Viewpager切换焦点问题
- Java上机作业_键盘录入并存入文件。。。
- Ajax和Action之间Json数据的交互--包含List数据传输
- Codeforces Beta Round #1 Theatre Square
- ora-1031: message 1031 not found
- WLAN基础知识思维导图(Xmind)
- Cocos2d-3.x 开机logo动画实例
- 设计模式:行为型(1)
- Spring学习(七)深入理解Spring IoC容器
- [转载]MD5加密算法原理
- 转发:dd大牛的《背包九讲》
- Centos优化Hadoop
- vs2013 javascript语言服务遇到错误且已关闭解决方案
- Android进阶 - 1 - Parcelable和Serializable使用详解
- 泛型
- 利用反射获取类或者方法或者字段上的注解的值
- 猿题库面试总结
- 获取当前工程路径
- java上机作业_文件的复制
- android中string.xml中%1$s、%1$d等的用法