# 비트연산
이 문제의 경우 비트연산을 이해하고 사용할 줄 안다면 쉽게 풀 수 있는 문제이다.
푸는 과정에서 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 |