Input示例
8 9 -1 6 5 3 4 2 9 0 8
Output示例
-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=0;i<n;i++){ scanf("%d",&arr[i]); } sort(arr,arr+n); int c=0; for(int i=0;i<n;i++){ for(int j=i+1;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 0; }
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=0;i<n;i++){ scanf("%d",&arr[i]); } sort(arr,arr+n); int c=0; for(int i=0;i<n;i++){ for(int j=n-1;j>=i+1;j--){ if(arr[i]+arr[j]==k){ printf("%d %d\n",arr[i],arr[j]); c++; break; } } } if(!c){ printf("No Solution\n"); } } return 0; }