본문 바로가기

공부합시다

std::bitset

참고자료

 

https://www.geeksforgeeks.org/c-bitset-and-its-application/

 

C++ bitset and its application - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

전에 문제에서 bitset을 사용해서 문제를 풀었는데 long long int로 사용해서 최대 64개의 원소만 다룰 수 있었다.

bitset 클래스를 사용하면 좀 더 넓은 범위를 사용할 수 있다.

 

int main ()
{
  std::bitset<16> foo;
  std::bitset<16> bar (0xfa2);
  std::bitset<16> baz (std::string("0101111001"));

  std::cout << "foo: " << foo << '\n';
  std::cout << "bar: " << bar << '\n';
  std::cout << "baz: " << baz << '\n';

  return 0;
}

 

<16> : 이게 비트맵의 사이즈인듯

64bit 저장하고 싶으면 bitset<64>로 만들면 되겠다

 

std::bitset<16> baz (std::string("0101111001"));

이렇게 문자열로 초기화 가능하구나

 

set8[1] = 1; // 00000010 
set8[4] = set8[1]; // 00010010 

// bset.set(pos, b) makes bset[pos] = b 
cout << set8.set(4, 0) << endl; 

 

오! 이렇게 하나하나 설정이 가능하구나 and로 끙끙대며 하나씩 안 바꿔도 되겠다

 

cout << set8.flip(2) << endl; 
cout << set8.flip() << endl; 

 

헉 이것봐 flip도 가능

 

비트셋 백터 만들기, OR 연산 |=

 

    vector<bitset<2005> > lamp(n);
    for (int i = 0; i < n; i++) {
        int num;
        scanf("%d", &num);
        
        for (int j = 0; j < num; j++) {
            int input;
            scanf("%d", &input);
            
            lamp[i][input] = 1;
        }
    }
    
    int ans = 0;
    for (int i = 0; i < n; i++) {
        bitset<2005> check;
        for (int j = 0; j < n; j++) {
            if (i == j)
                continue;
            
            check |= lamp[j];
        }
        
        bool isTrue = true;
        for (int i = 1; i <= m; i++) {
            if (check[i] == 0)
                isTrue = false;
        }
        
        if (isTrue) {
            ans = 1;
            break;
        }
    }

 

'공부합시다' 카테고리의 다른 글

비트마스크로 부분집합 관리  (0) 2020.09.21
거듭 제곱 빠른 계산  (0) 2020.09.19
점 3개의 방향성을 나타내는 CCW  (0) 2020.09.01
소수 판별법 - 에라토스테네스의 체  (0) 2020.08.04
조합 수 구하기  (0) 2020.07.19