本文主要是介绍DUTOJ 1282: Zeratul与a+b=c bitset 小内存数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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;}
这篇关于DUTOJ 1282: Zeratul与a+b=c bitset 小内存数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!