您的位置:首页 > 其它

FAFU OJ 一个简单的问题

2017-06-15 17:31 176 查看
一个简单的问题

Time Limit:1000MSMemory Limit:65536KB
Total Submissions:1386Accepted:240
Share

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: