FAFU OJ 一个简单的问题

来源:互联网 发布:怎么查看手机mac地址 编辑:程序博客网 时间:2024/04/30 04:38
一个简单的问题
Time Limit:1000MSMemory Limit:65536KBTotal Submissions:1386Accepted:240Share
Description:
      给定N个正整数和一个正整数P,要求你从中找出两个数字a,b使得a + b = p;
Input:
第一行两个数字n,p(n<=10^5;p,n个整数<2^32);第二行n个数字
Output:
若能找到这两个数字输出Yes,否则输出No.
Sample Input:
3 3
1 2 3
4 2
1 3 2 1
1 5
5
Sample Output:
Yes
Yes
No
Source:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;long long p;long long num[100005];int main(void){    int n,i=0,j,flag=0;    memset(num,0,sizeof(num));    while(scanf("%d%lld",&n,&p) == 2)    {            while(n--)        {            scanf("%lld",&num[i]);            if(num[i] >= p) continue;//如果输入的数字大于p,丢掉            i++;        }        n = i;        //n为除去丢弃后剩余的数字个数        sort(num,num+n);        for(i=0,j=n-1; i<j;)        {            if(num[i]+num[j] > p)       j--;    //大于p说明最右边太大,取小一点,左移            else if(num[i]+num[j] < p)  i++;    //小于p说明最左边太小,取大一点,右移            else      {flag = 1;break;}            //相等,找到了         }        if(flag)    printf("Yes\n");        else        printf("No\n");        i = flag = 0;        memset(num,0,sizeof(num));    }    return 0;}



原创粉丝点击