-> 시간초과 뜸.
#include <iostream>
#include <vector>
using namespace std;
#include <bitset>
#include <string>
// 이 문제를 왜 비트 연산자로 풀려고 했냐면?
// toggle , 반전을 한다던지
// 집합 처리를 한다던지
// 기존의 값을 제거한다던지
// => 처음에는 map에다가 넣어서 진행해볼까?
// 했는데, map에 넣더라도 , 이미 있는 키값에 대해서
// 값 변경은 못하므로 안됨.
// 그렇다고 벡터로 하기에는 탐색 시간치 초과할 듯함.
// =====================================//
// 결론 => 시간을 빠르게 처리할 수 있는 비트 연산을 해야겠다는
// 생각을 하게됨.
int main()
{
int num;
cin >> num;
int data = 0;
for (int i = 0; i < num; ++i)
{
//string s;
char s[11];
int n;
scanf(" %s %d", &s, &n);
//cin >> s >> n;
// s에 all이 들어가면,, n에는 값이 안들어가는데,,
// 그 뒤를 비워야 함.
//if(s == "all" || s == "empty")
// cin.clear();
//if (s == "add")
if(s[0] == 'a' && s[1] == 'd')
{
// 이미 값이 있다면 연산을 무시해야 함.
//if ( ( data & (1 << n) ) == 0)
data |= (1 << n);
}
//else if (s == "remove")
else if(s[0] == 'r')
{
// 해당 인덱스에서 1을 제거하자.
// 이미 없다면 연산을 무시함.
//if ( ( data & (1 << n) ) != 0)
{
//data -= (1 << n);
data &= ~(1 << n);
}
}
//else if (s == "check")
else if(s[0] =='c')
{
//int nnn = (data & (1 << n));
// 해당 인덱스에 1이 위치해 있는지를 확인하자.
// 0723 주의할 점 : 인덱스에 값이 있음을 확인할 때
// 1이 나옴, 즉 true , 1이 true 라는 생각을 하면
// 안됨!
if ( ( data & (1 << n) ) == 0)
{
cout << 0 << endl;
}
else
cout << 1 << endl;
}
//else if (s == "toggle")
else if(s[0] == 't')
{
// 값이 있으면 제거하고 없으면 , 추가하자.
data ^= (1 << n);
//if ( ( data & (1 << n) ))
//{
// data -= (1 << n);
//
//}
//else
//{
// data |= (1 << n);
//}
}
//else if (s == "all")
else if(s[0] == 'a' && s[1] == 'l')
{
// 모든 비트를 킴.
data = (1 << 21) - 1;
}
//else if (s == "empty")
else
{
// 공집합 00000
data = 0;
}
}
}