选数(normal) ssl-1191 c++

题目:

Description

有两组整数,问能不能从两组整数中各挑一个整数出来,
使这两个数字的和为10000。
这些整数的范围都在[-32768,32767]之间。

Input

第1行一个整数N表示第1组数的个数。
接下来N行升序列出第1组中的数字。
再接下来1行一个整数M表示第2组数的个数。
接下来M行降序列出第2组中的数字。
1<=N,M<=50000

Output

如果可以输出YES,否则输出NO。

思路:

先排序,在逐个加

代码:

#include
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]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);

}

你可能感兴趣的:(c语言,题解,题解)