poj3266
`//已知两个给定的序列,一个升序排列,一个降序排列,在这两个序列中各找一个数,它们加 起来恰好等于 10000。
//解题:一个序列升序操作,另一个序列进行枚举
include
include<stdio.h>
include<math.h>
include<string.h>
include
include
using namespace std;
const int N = 5e4 + 10;
int a[N];
int b[N];
int main()
{
int n, m;
scanf("%d", &n);
for(int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
}
scanf("%d", &m);
for (int i = 1; i <= m; i++)
{
scanf("%d", &b[i]);
}
sort(b + 1, b+m + 1);//对其进行升序操作在#include
int s,t,mid;
for (int i = 1; i <= n; i++)
{
int x = 10000 - a[i];
//采用二分法查找
s = 1;
t = m;
while (s <= t)
{
mid = (s + t) / 2;
if (b[mid] < x)
s = mid + 1;
else if (b[mid] == x)
{
printf("YES\n");
return 0;
}
else
t = mid - 1;
}
}
printf("NO\n");
return 0;
}`

浙公网安备 33010602011771号