51Nod 1001数组中和等于K的数对
- 8 9
- -1
- 6
- 5
- 3
- 4
- 2
- 9
- 0
- 8
- -1 9
- 0 8
- 2 6
- 3 5
first try:
- #include "bits/stdc++.h"
- using namespace std;
- #define LL long long
- #define INF 0x3f3f3f3f3f
- #define PI acos(-1)
- #define N 50010
- int arr[N];
- int main()
- {
- int n,k;
- while(~scanf("%d%d",&k,&n)){
- for(int i=;i<n;i++){
- scanf("%d",&arr[i]);
- }
- sort(arr,arr+n);
- int c=;
- for(int i=;i<n;i++){
- for(int j=i+;j<n;j++){
- if(arr[i]+arr[j]==k){
- printf("%d %d\n",arr[i],arr[j]);
- c++;
- }
- }
- }
- if(!c){
- printf("No Solution\n");
- }
- }
- return ;
- }
O(n^2)
Time limit exceeded,优化
second try:
第二层从后向前找,及时跳出
- #include "bits/stdc++.h"
- using namespace std;
- #define LL long long
- #define INF 0x3f3f3f3f3f
- #define PI acos(-1)
- #define N 50010
- int arr[N];
- int main()
- {
- int n,k;
- while(~scanf("%d%d",&k,&n)){
- for(int i=;i<n;i++){
- scanf("%d",&arr[i]);
- }
- sort(arr,arr+n);
- int c=;
- for(int i=;i<n;i++){
- for(int j=n-;j>=i+;j--){
- if(arr[i]+arr[j]==k){
- printf("%d %d\n",arr[i],arr[j]);
- c++;
- break;
- }
- }
- }
- if(!c){
- printf("No Solution\n");
- }
- }
- return ;
- }
Time limit exceeded,再优化
third try:
转换思维,查找互补数是否存在,二分查找,分治
- #include "bits/stdc++.h"
- using namespace std;
- #define LL long long
- #define INF 0x3f3f3f3f3f
- #define PI acos(-1)
- #define N 50010
- int arr[N];
- int Find(int n,int x){
- int r=n-,l=,m;
- while(l<=r){
- m=(r+l)/;
- if(x==arr[m])
- return m;
- else if(x>arr[m])
- l=m+;
- else
- r=m-;
- }
- return -;
- }
- int main()
- {
- int n,k;
- while(~scanf("%d%d",&k,&n)){
- for(int i=;i<n;i++){
- scanf("%d",&arr[i]);
- }
- sort(arr,arr+n);
- int c=,tt;
- for(int i=;i<n;i++){
- tt=Find(n,k-arr[i]);
- if(tt!=-){
- if(tt<=i)
- break;
- printf("%d %d\n",arr[i],k-arr[i]);
- c++;
- }
- }
- if(!c){
- printf("No Solution\n");
- }
- }
- return ;
- }
51Nod 1001数组中和等于K的数对的更多相关文章
- 51nod 1001 数组中和等于K的数对【二分查找/排序】
1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组 ...
- 51Nod 1001 数组中和等于K的数对 And 1015 水仙花数
1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K ...
- 51Nod 1001 数组中和等于K的数对 Label:Water
给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9),(0 ...
- 51Nod 1001 数组中和等于K的数对 Set
给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9),(0 ...
- 51Nod 1001 数组中和等于K的数对
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1001一开始的想法是排序后二分搜索,发现会进行非常多不必要的遍历,十分耗时 ...
- 1001 数组中和等于K的数对
1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A ...
- 1001 数组中和等于K的数对 1002 数塔取数问题 1003 阶乘后面0的数量 1004 n^n的末位数字 1009 数字1的数量
1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K ...
- 1001 数组中和等于K的数对 1090 3个数和为0
二分查找.对数组每个V[i],在其中查找K-V[i],查找完成后修改v[i]避免重复输出 #include<iostream> #include<algorithm> #inc ...
- 51Nod - 1001:数组中和等于K的数对
基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A: ...
随机推荐
- Redis 错误摘记篇
yum安装的redis提示如下报错,大概意思就是配置文件和redis-server进程文件版本不一致.. [root@vm-10-104-28-24 yum.repos.d]# redis-serve ...
- Thunder团队第一周 - Scrum会议3
Scrum会议3 小组名称:Thunder 项目名称:在线考试系统 Scrum Master:杨梓瑞 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李 ...
- JSP在页面加载时调用servlet的方法
方法:先在JS里面写一个调用servlet的事件(可以利用ajax),然后利用<body>标签的onload调用这个事件. 代码如下: jsp文件代码如下: <%@ page lan ...
- 【Linux】CentOS安装redis
CENTOS7下安装REDIS 安装完成之后使用:redis-cli命令连接,如图: 提示:/var/run/redis_6379.pid exists, process is already run ...
- win7系统日志分支删除方法
这篇日志有问题,自己亲身尝试失败,这里只提供思路,谢谢(改天突破再做修改) 之前电脑装过德国的叫啥子软件来着,当时在系统自动创建了日志,后来软件卸载了,发现还是有这个日志主键,(我有强迫症)心里不爽, ...
- DBGrid相关技术整理
DBGrid相关技术整理: 注:对于DBGrid相关属性.方法的学习融入到技术整理过程中 一,多选 设置属性: Options->dgMultiSelect = True; ->dgRow ...
- md5和base64加密解密
import java.io.IOException; import java.security.MessageDigest; import sun.misc.BASE64Encoder; impor ...
- C++基础知识(二)
八. 继承:让某个类的对象获得另一个类的对象的特性.通过继承可实现代码重用,即从已存在的类派生出的一个新类将自动具有原来那个类的特性. 类的继承还具有:(1)单向性:A类为B类的基类(父类),则派生类 ...
- hdu3625-Rooms
题目 有\(n\)个房间,\(n\)个钥匙,每个钥匙随机出现在一个房间里,一个房间里有且仅有一个钥匙.我们现在手上没有钥匙,但我们要搜索所有的房间,所以我们有\(k\)次机会把一个房间炸开.一号房间里 ...
- BZOJ 口胡记录
最近实在是懒的不想打代码...好像口胡也算一种训练,那就口胡把. BZOJ 2243 染色(树链剖分) 首先树链剖分,然后记录下每个区间的左右端点颜色和当前区间的颜色段.再对每个节点维护一个tag标记 ...