51Nod 1001數組中和等於K的數對

給出一個整數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)。
Input
第1行:用空格隔開的2個數,K N,N爲A數組的長度。(2 <= N <= 50000,-10^9 <= K <= 10^9)
第2 - N + 1行:A數組的N個元素。(-10^9 <= A[i] <= 10^9) 
Output
第1 - M行:每行2個數,要求較小的數在前面,並且這M個數對按照較小的數升序排列。
如果不存在任何一組解則輸出:No Solution。
Input示例
8 9
-1
6
5
3
4
2
9
0
8
Output示例
-1 9
0 8
2 6
3 5

5W的數據 暴力 n^2 肯定是要TLE的,所以要想辦法優化一下

代碼應該可以看得懂

#include <iostream>
#include <algorithm>
using namespace std;
int a[50010];

int main()
{
	int k,n,flag = 0;
	cin >> k >> n;
	for(int i = 0;i<n;i++)
		cin >> a[i];
	sort(a,a+n);
	int i = 0,j = n-1;
	while(i < j)
	{
		int n = a[i] + a[j];
		if(n == k)
		{
			flag = 1;
			cout<<a[i++]<<" "<<a[j--]<<endl;
		}
		else if(n < k)      
			i++;
		else
			j--;
	}
	if(!flag)
		cout<<"No Solution"<<endl;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章