openjudge水题 你五毛我一毛,咱就能一块了

来源:互联网 发布:淘宝助理无法一键适配 编辑:程序博客网 时间:2024/04/28 06:03

你五毛我五毛,咱就能一块了


总时间限制: 
1000ms 
内存限制: 
65536kB
描述

“五毛一块”的游戏,很多人都玩过。现在我们玩一个游戏,有N个人参与,他们身上都带着各不相同的钱,给定一个magic数K,如果两两配对的总钱数等于K,那么这样的组合将会是幸运的。例如K = 8,9个人携带的钱为:{-1,6,5,3,4,2,9,0,8},幸运的组合有(-1,9),(0,8),(2,6),(3,5)。(钱为负数,则为欠钱)

输入
第1行:用空格隔开的2个数,K N,N为总人数。(2 <= N <= 50000,-10^9 <= K <= 10^9)
第2 - N + 1行:每个人携带的钱数。(-10^9 <= A[i] <= 10^9)
输出
第1 - M行:输出M个幸运的组合,每行2个钱数,要求较小的钱数在前面,并且这M个组合对按照较小的钱数升序排列。
如果不存在幸运的组合则输出:No Solution。
样例输入
8 9-165342908
样例输出
-1 90 82 63 5
排序后,从两端向中间取数
#include<stdio.h>#include<iostream>#include<stdlib.h>using namespace std;int f(const void *a,const void *b){return (*(long long*)a-*(long long *)b);}int main(){long long k,a[50001];int n,i,j;long long begin,end;int flag = 0;scanf("%lld%d",&k,&n);for(i=0;i<n;i++){scanf("%lld",&a[i]);}qsort(a,n,sizeof(long long),f);begin = a[0];end = a[n-1];i=0;j=n-1;while(i<j){if(begin+end ==k){printf("%lld %lld\n",begin,end);flag = 1;i++;j--; }if(begin+end<k){i++;}if(begin+end>k){    j--;}begin=a[i];end=a[j]; }if(flag==0){printf("No Solution\n");}return 0; } 



原创粉丝点击