UVALive

题意:

给定一个整数w, 然后给定n个数, 问有没有两个数之和恰好为w

分析:

现将n个数数组a[]排序, 然后用两个变量i,j指向开头和末尾, 如果a[i] + a[j] > w, i++, 如果a[i] + a[j] < w, j--。

直到相等或者i == j(找不到结果)

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int len[1000000+7];
 4 int main(){
 5     int w, n;
 6     while(~scanf("%d", &w)){
 7         w *= 1e7;
 8         scanf("%d", &n);
 9         for(int i = 0; i < n; i++) scanf("%d", &len[i]);
10         sort(len, len + n);
11         int i = 0, j = n-1;
12         do{
13             if(len[i] + len[j] > w) j--;
14             else if(len[i] + len[j] < w) i++;
15         }while(len[i] + len[j] != w && i < j);
16         if(i < j) printf("yes %d %d
", len[i], len[j]);
17         else printf("danger
");
18     }
19 }
原文地址:https://www.cnblogs.com/Jadon97/p/8097754.html