# 비트연산
이 문제의 경우 비트연산을 이해하고 사용할 줄 안다면 쉽게 풀 수 있는 문제이다.
푸는 과정에서 3, 4명령어의 이동 방향을 잘 못 생각하여 실수를 하였다.
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <math.h> #include <queue> #include <set> #include <list> #include <utility> #include <functional> #define MAX 100005 #define INF 987654321 #define MOD 1000000009 #pragma warning(disable:4996) using namespace std; typedef long long ll; typedef pair<int, int> pi; typedef pair<pi, pi> ppi; int n, m,train[MAX],a,b,c,ans=0; bool visit[(1 << 20) - 1]; int main() { scanf("%d%d", &n, &m); for (int i = 0; i < m; i++) { scanf("%d%d", &a, &b); if (a == 1 || a == 2) scanf("%d", &c); if (a == 1) train[b] |= 1 << (c - 1); else if (a == 2) train[b] &= ((1 << 20) - 1) - (1 << (c - 1)); // 3, 4의 명령어의 경우 이동의 방향에 대해서 생각해 봐야한다. // 여기서 실수를 했다. else if (a == 3) train[b] = train[b] * 2 & ((1 << 20) - 1); else if (a == 4) train[b] /= 2; } for(int i=1;i<=n;i++) // 풀이 할 때 0명이 탑승한 것도 계산해야한다. if (visit[train[i]] == false) { ans++; visit[train[i]] = true; } printf("%d", ans); return 0; }
'IT > BOJ' 카테고리의 다른 글
백준(BOJ) 15791 세진이의 미팅 ** (0) | 2018.06.05 |
---|---|
백준(BOJ) 14621 나만 안되는 연애 ** (0) | 2018.06.03 |
백준(BOJ) 11726 2*n 타일링 ** (0) | 2018.06.01 |
백준(BOJ) 11084 나이트의 염탐 ** (0) | 2018.06.01 |
백준(BOJ) 2449 전구 *** (0) | 2018.06.01 |