选数(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<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);

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值