大意
在两组数中各取一个数,若和可能为10000输出Yes,否则为No
思路
这道题最麻烦的是它存在负数,我们可以开一个桶,然后让桶中所有元素统统加上一个正整数,该数一定要大于数据的最大范围,当然若数据最大范围过大,可以采用 或 求解,本文用的是 和桶
代码
#include<cstdio>
#include<map>
using namespace std;int a,n,m;
map<int,bool>ma;
signed main()
{
scanf("%d",&n);
for(register int i=1;i<=n;i++) scanf("%d",&a),ma[a]=true;//标记这个数存在
scanf("%d",&m);
for(register int i=1;i<=m;i++) {scanf("%d",&a);if(ma[10000-a]==true) return printf("YES")&0;}//计算是否有数能跟它匹配
printf("NO");//否则输出NO
}
代码2
#include<cstdio>
#include<map>
using namespace std;int a,n,m;
bool ma[100001];
signed main()
{
scanf("%d",&n);
for(register int i=1;i<=n;i++) scanf("%d",&a),ma[a+50000]=true;
scanf("%d",&m);
for(register int i=1;i<=m;i++) {scanf("%d",&a);if(ma[60000-a]==true) return printf("YES")&0;}//因为之前是50000,所以这里要加上去变成用60000去减
printf("NO");
}