题意:
给定一个整数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\n", len[i], len[j]); 17 else printf("danger\n"); 18 } 19 }