题目:
Description
有两组整数,问能不能从两组整数中各挑一个整数出来,
使这两个数字的和为10000。
这些整数的范围都在[-32768,32767]之间。
Input
第1行一个整数N表示第1组数的个数。
接下来N行升序列出第1组中的数字。
再接下来1行一个整数M表示第2组数的个数。
接下来M行降序列出第2组中的数字。
1<=N,M<=50000
Output
如果可以输出YES,否则输出NO。
思路:
先排序,在逐个加
代码:
#include<iostream>
using namespace std;
int a[50000];
int b[50000];
int n,n1,ans;
void qsort(int l, int r)
{
if (l>=r) return;
int i,j,mid,t;
i=l; j=r; mid=a[(i+j)/2];
do
{
while(a[i]<mid) i++;
while(a[j]>mid) j--;
if(i<=j)
{
t=a[i]; a[i]=a[j]; a[j]=t;
i++; j--;
}
}
while(i<=j);
qsort(l,j);
qsort(i,r);
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
qsort(1,n);
for(int i=1;i<=n;i++) b[i]=a[i];
cin>>n1;
for(int i=1;i<=n1;i++) cin>>a[i];
qsort(1,n1);
for(int i=1;i<=n1;i++)
{
for(int j=1;j<=n;j++)
{
if((a[i]+b[j])==10000)
{
cout<<"YES";
return(0);
}
}
}
cout<<"NO";
return(0);
}