题意:给出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; }