时间限制:1s 内存限制:16mb
兄弟们达成共识后,便各自回到他们自己的密室,到第二天,他们每个人都准备了一些对于他们来说可以拯救他们之间感情的数字,这些数字可以拯救他们的感情吗?你的程序应该决定,是否有可能从两个整数列表选择这样两个数字,它们的和为10000.
输入:
每堆数(共2堆)的输入格式如下:N(1<=N<=50000),以下N行为每堆数中所包含的数(每个数的大小在PASCAL中的integer范围内)【注意:虽然原题中说是如此,但是如果数组只开-35000..35000,就会在第4个点WA,建议开-100000..100000】。 1 <= N <= 50 000 。第一堆数按照升序排列,第二堆数按照降序排列
输出:
如果能找到符合要求的两个数,就输出"YES",否则输出"NO"
Sample Input
4
-175
19
19
10424
3
8951
-424
-788
Sample Output
YES
C++数组没负下标,加个常数平移即可
这道题我自己二分错了
还有我竟然把’YES' 写成了”Yes“
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <ctime>
#include <cmath>
#define loc
#define mxn 50000+10
#define mv 100000
using namespace std;
int n,m;
bool v[mv*2];
int main()
{
freopen("sacra.in","r",stdin);
freopen("sacra.out","w",stdout);
int tm;
scanf("%d",&n);
for (int i=1;i<=n;++i)
{
scanf("%d",&tm);
v[mv+tm]=true;
}
scanf("%d",&m);
for (int i=1;i<=m;++i)
{
scanf("%d",&tm);
if (v[mv+10000-tm]) printf("YES"),exit(0);
}
printf("NO");
return 0;
}