7/21 F 解题报告
没什么要说的,对两个列表中的第一个进行二分即可,因为第一个本来就是升序,不需要排序。对第二个列表中的每个元素,在第一个表二分查。
以下是代码(可直接AC):
#include <iostream>
#include <algorithm>
using namespace std;
int a[50001],b[50001];
int main()
{
int l,n,m,k,ca=0,p;
int x,y,z;
int low,high,mid;
bool flag,quit,con;
while(cin>>l)
{
for(int i=0;i<l;i++)
cin>>a[i];
cin>>n;
for(int i=0;i<n;i++)
cin>>b[i];
flag=false;
for(int i=0;i<n&&!flag;i++)
{
low=-1;
high=l;
mid=(low+high)/2;
while(low<high-1)
{
if(a[mid]+b[i]==10000)
{
flag=true;
cout<<"YES\n";
break;
}else{
if(a[mid]+b[i]>10000)
{
high=mid;
mid=(low+high)/2;
}else{
low=mid;
mid=(low+high)/2;
}
}
}
}
if(!flag)
cout<<"NO\n";
}
return 0;
}