又见简单题,数据范围比较小,直接用vis数组来进行标记,然后再输入m个数的时再去寻找,负数的处理可以定一个平衡点,以前的每个数都加上平衡点来构成新的数。然后存储新的数即可,计算的时候需要考虑到自己的平衡点,处理下就ok。
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int N = 66010;
bool vis[N];
int n, m;
int main(void)
{
memset(vis, false, sizeof(vis));
scanf("%d",&n);
int tmp;
for(int i=1; i<=n; ++i)
{
scanf("%d",&tmp);
tmp += 33000;
vis[tmp] = true;
}
scanf("%d",&m);
bool flag = false;
for(int i=1; i<=m; ++i)
{
scanf("%d",&tmp);
if(!flag)
{
tmp = 10000 - tmp + 33000;
if(0<=tmp&&tmp<N&&vis[tmp])
flag = true;
}
}
if(flag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
return 0;
}
本文介绍了一种解决简单数据范围问题的方法——通过使用vis数组进行标记。通过对输入数据加上平衡点来处理负数,实现了快速查找并判断是否包含特定数值的功能。
1191

被折叠的 条评论
为什么被折叠?



