欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-09 11:47:29
...

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

问题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语言代码不会出现编译问题。

来源/分类


[提交] [状态]
#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;

}


相关标签: 两数和 bitset