0
点赞
收藏
分享

微信扫一扫

DUTOJ 1282: Zeratul与a+b=c bitset 小内存数组


DUTOJ 1282: Zeratul与a+b=c  bitset 小内存数组_i++


问题1282--Zeratul与a+b=c

1282: Zeratul与a+b=c

时间限制: 1 Sec   内存限制: 32 MB

提交: 148  

解决: 25

[提交] [状态] [讨论版] [命题人:Zeratul]


题目描述


判断一个数列中是否有两个数加起来等于cc,含义见Description。


输出


如果数列中存在两个数加起来等于c,输出YES,否则输出NO。


样例输入

5
1 5 4 2 3
8


样例输出

YES


提示


 你或许需要使用std::bitset来通过此题。你可以阅读以下代码来学习bitset的基本用法:



bitset<12345>bs; //相当于声明一个长度为12345的bool数组,初始值为全0。相比直接声明一个bool数组,bitset占用的空间只有bool数组的约八分之一。



bs[13] = 1;      //将下标为13的元素值改为1



if (bs[13]) printf("ok"); //如果下标为13的元素值为1,输出ok




如果你不知道bitset在哪个头文件里,欢迎使用bits/stdc++.h, 但是这个头文件只能在C++语言中使用。如果你写了c语言语法的代码,可以尝试提交为c++代码(需要在头文件下加一句using namespace std;),通常情况下c++编译c语言代码不会出现编译问题。


来源/分类


Zeratul 


[ 提交] [

状态]


#include <bits/stdc++.h>
#include <iostream>
using namespace std;
/*
超空间
int main()
{
    int n;
    map<int,bool> mp;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        int temp;
        scanf("%d",&temp);
        mp[temp] = 1;
    }
    int c;
    scanf("%d",&c);
    map<int,bool>::iterator it;
    for(it=mp.begin();it!=mp.end();it++){
        if( mp[c - (it->first) ] ){
            cout<<"YES"<<endl;
            return 0;
        }
    }
    cout<<"NO"<<endl;
    return 0;
}
*/

bitset<100000001> bs;
int main (){

    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        int temp;
        scanf("%d",&temp);
        bs[temp] = 1;
    }
    int c;
    scanf("%d",&c);
    for(int i=1;i<=100000000;i++){
        if(bs[i] && c-i >=0 && c-i<=100000000 && bs[c-i]){
            cout<<"YES"<<endl;
            return 0;
        }
    }
    cout<<"NO"<<endl;
    return 0;

}


举报

相关推荐

5880: (a+b)×c

A+B和C

1011 A+B 和 C

PTA 1011 A+B>C

C解决1011 A+B 和 C

PAT.B1011 A+B 和 C

PAT 1011 A+B和C

1007:计算(a+b)×c的值

0 条评论