题意:给出N个递增的数ai,M个递减的数bi.求是否存在一对ai,bj使得ai+bj=10000.
分析:N<=50000,N^2效率一定不行了.看到a,b数列均单调,这可以加速.
设置一个指针i指向a,j指向b.
初始i=1,j=1.
若ai+bj>10000,那么肯定bj+ai'(i'>i)都不等于10000,因为ai递增.所以j=j+1.
同理,若ai+bj<10000,i=i+1.
这个方法很有用,要记下.
code(无聊地写了C++):
#include<iostream>
using namespace std;
int a[51000],b[51000];
int main()
{
int i,j,n,m;
bool flag;
scanf("%d",&n);
for (i=1;i<=n;i++) scanf("%d\n",&a[i]);
scanf("%d",&m);
for (j=1;j<=m;j++) scanf("%d\n",&b[j]);
i=1;
j=1;
flag=0;
while (i<=n&&j<=m)
{
if (a[i]+b[j]==10000) {flag=1; break;}
if (a[i]+b[j]<10000) i++;
if (a[i]+b[j]>10000) j++;
}
if (flag) printf("YES\n");
else printf("NO\n");
return 0;
}
浙公网安备 33010602011771号