Input示例
  1. 8 9
  2. -1
  3. 6
  4. 5
  5. 3
  6. 4
  7. 2
  8. 9
  9. 0
  10. 8
Output示例
  1. -1 9
  2. 0 8
  3. 2 6
  4. 3 5

first try:

  1. #include "bits/stdc++.h"
  2. using namespace std;
  3. #define LL long long
  4. #define INF 0x3f3f3f3f3f
  5. #define PI acos(-1)
  6. #define N 50010
  7. int arr[N];
  8. int main()
  9. {
  10. int n,k;
  11. while(~scanf("%d%d",&k,&n)){
  12. for(int i=;i<n;i++){
  13. scanf("%d",&arr[i]);
  14. }
  15. sort(arr,arr+n);
  16. int c=;
  17. for(int i=;i<n;i++){
  18. for(int j=i+;j<n;j++){
  19. if(arr[i]+arr[j]==k){
  20. printf("%d %d\n",arr[i],arr[j]);
  21. c++;
  22. }
  23. }
  24. }
  25. if(!c){
  26. printf("No Solution\n");
  27. }
  28. }
  29. return ;
  30. }

O(n^2)

Time limit exceeded,优化

second try:

第二层从后向前找,及时跳出

  1. #include "bits/stdc++.h"
  2. using namespace std;
  3. #define LL long long
  4. #define INF 0x3f3f3f3f3f
  5. #define PI acos(-1)
  6. #define N 50010
  7. int arr[N];
  8. int main()
  9. {
  10. int n,k;
  11. while(~scanf("%d%d",&k,&n)){
  12. for(int i=;i<n;i++){
  13. scanf("%d",&arr[i]);
  14. }
  15. sort(arr,arr+n);
  16. int c=;
  17. for(int i=;i<n;i++){
  18. for(int j=n-;j>=i+;j--){
  19. if(arr[i]+arr[j]==k){
  20. printf("%d %d\n",arr[i],arr[j]);
  21. c++;
  22. break;
  23. }
  24. }
  25. }
  26. if(!c){
  27. printf("No Solution\n");
  28. }
  29. }
  30. return ;
  31. }

Time limit exceeded,再优化

third try:

转换思维,查找互补数是否存在,二分查找,分治

  1. #include "bits/stdc++.h"
  2. using namespace std;
  3. #define LL long long
  4. #define INF 0x3f3f3f3f3f
  5. #define PI acos(-1)
  6. #define N 50010
  7. int arr[N];
  8. int Find(int n,int x){
  9. int r=n-,l=,m;
  10. while(l<=r){
  11. m=(r+l)/;
  12. if(x==arr[m])
  13. return m;
  14. else if(x>arr[m])
  15. l=m+;
  16. else
  17. r=m-;
  18. }
  19. return -;
  20. }
  21. int main()
  22. {
  23. int n,k;
  24. while(~scanf("%d%d",&k,&n)){
  25. for(int i=;i<n;i++){
  26. scanf("%d",&arr[i]);
  27. }
  28. sort(arr,arr+n);
  29. int c=,tt;
  30. for(int i=;i<n;i++){
  31. tt=Find(n,k-arr[i]);
  32. if(tt!=-){
  33. if(tt<=i)
  34. break;
  35. printf("%d %d\n",arr[i],k-arr[i]);
  36. c++;
  37. }
  38. }
  39. if(!c){
  40. printf("No Solution\n");
  41. }
  42. }
  43. return ;
  44. }

51Nod 1001数组中和等于K的数对的更多相关文章

  1. 51nod 1001 数组中和等于K的数对【二分查找/排序】

    1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组 ...

  2. 51Nod 1001 数组中和等于K的数对 And 1015 水仙花数

    1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K ...

  3. 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 ...

  4. 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 ...

  5. 51Nod 1001 数组中和等于K的数对

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1001一开始的想法是排序后二分搜索,发现会进行非常多不必要的遍历,十分耗时 ...

  6. 1001 数组中和等于K的数对

    1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A ...

  7. 1001 数组中和等于K的数对 1002 数塔取数问题 1003 阶乘后面0的数量 1004 n^n的末位数字 1009 数字1的数量

    1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K ...

  8. 1001 数组中和等于K的数对 1090 3个数和为0

    二分查找.对数组每个V[i],在其中查找K-V[i],查找完成后修改v[i]避免重复输出 #include<iostream> #include<algorithm> #inc ...

  9. 51Nod - 1001:数组中和等于K的数对

    基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A: ...

随机推荐

  1. Redis 错误摘记篇

    yum安装的redis提示如下报错,大概意思就是配置文件和redis-server进程文件版本不一致.. [root@vm-10-104-28-24 yum.repos.d]# redis-serve ...

  2. Thunder团队第一周 - Scrum会议3

    Scrum会议3 小组名称:Thunder 项目名称:在线考试系统 Scrum Master:杨梓瑞 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李 ...

  3. JSP在页面加载时调用servlet的方法

    方法:先在JS里面写一个调用servlet的事件(可以利用ajax),然后利用<body>标签的onload调用这个事件. 代码如下: jsp文件代码如下: <%@ page lan ...

  4. 【Linux】CentOS安装redis

    CENTOS7下安装REDIS 安装完成之后使用:redis-cli命令连接,如图: 提示:/var/run/redis_6379.pid exists, process is already run ...

  5. win7系统日志分支删除方法

    这篇日志有问题,自己亲身尝试失败,这里只提供思路,谢谢(改天突破再做修改) 之前电脑装过德国的叫啥子软件来着,当时在系统自动创建了日志,后来软件卸载了,发现还是有这个日志主键,(我有强迫症)心里不爽, ...

  6. DBGrid相关技术整理

    DBGrid相关技术整理: 注:对于DBGrid相关属性.方法的学习融入到技术整理过程中 一,多选 设置属性: Options->dgMultiSelect = True; ->dgRow ...

  7. md5和base64加密解密

    import java.io.IOException; import java.security.MessageDigest; import sun.misc.BASE64Encoder; impor ...

  8. C++基础知识(二)

    八. 继承:让某个类的对象获得另一个类的对象的特性.通过继承可实现代码重用,即从已存在的类派生出的一个新类将自动具有原来那个类的特性. 类的继承还具有:(1)单向性:A类为B类的基类(父类),则派生类 ...

  9. hdu3625-Rooms

    题目 有\(n\)个房间,\(n\)个钥匙,每个钥匙随机出现在一个房间里,一个房间里有且仅有一个钥匙.我们现在手上没有钥匙,但我们要搜索所有的房间,所以我们有\(k\)次机会把一个房间炸开.一号房间里 ...

  10. BZOJ 口胡记录

    最近实在是懒的不想打代码...好像口胡也算一种训练,那就口胡把. BZOJ 2243 染色(树链剖分) 首先树链剖分,然后记录下每个区间的左右端点颜色和当前区间的颜色段.再对每个节点维护一个tag标记 ...