DUTOJ 1282: Zeratul与a+b=c bitset 小内存数组
程序员文章站
2024-03-09 11:47:29
...
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;
}