-
YouTube - 3117Algorithm/BOJ 2020. 3. 20. 04:2612345678910111213141516171819202122232425262728293031323334353637383940414243444546474849//3117 - youtube#include <iostream>using namespace std;int N, K, M;int arr[100001][31];int student[100001];void init(){cin >> N >> K >> M;for (int i = 0; i < N; ++i)cin >> student[i];for (int i = 1; i <= K; ++i)cin >> arr[i][0];for (int j = 1; j < 31; ++j)for (int i = 1; i <= K; ++i)arr[i][j] = arr[arr[i][j - 1]][j - 1];}int Ldigit(int u){int ret = 0;while (u % 2 == 0){u /= 2;++ret;}return ret;}int main(){ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);init();for (int i = 0; i < N; ++i){int u = student[i];int v = M-1;while (v){u = arr[u][Ldigit(v)];v &= (v - 1);}cout << u << " ";}}
cs https://www.acmicpc.net/problem/3117
3117번: YouTube
문제 Sogang ACM-ICPC Team은 전통적으로 1학기에 신입생들에게 C언어를 가르쳐준다. 올해는 상근이가 C언어를 가르쳐 주기로 했다. 어느 날, 링크드 리스트를 설명하는 날이었다. 상근이는 앞에서, 구조체와 malloc을 이용해 링크드 리스트를 구현하는 방법을 설명하고 있었다. 2시간에 걸친 설명을 듣던 중, 지루해진 N명의 학생들은 남은 M분 동안 상근이 몰래 YouTube를 보기로 했다. YouTube에는 K개의 동영상이 있고, 1번부터 K
www.acmicpc.net
YouTube
희소테이블을 이용해 해결했습니다!
희소테이블을 초기화할때는 반드시 이동하는 횟수가 증가하도록 초기화 해주어야 합니다!!
즉 제 코드에선 2차원 배열의 열이 이동하는 횟수를 담당하고 있는데
초기화를 위해서 이중반복문이 한 열의 행들을 모두 채우고 그다음 열로 넘어가게 초기화를 해주어야 합니다!
'Algorithm > BOJ' 카테고리의 다른 글
단어 암기 - 18119 (0) 2020.03.23 ACM Craft - 1005 (0) 2020.03.22 Scoring Hack - 17234 (0) 2020.03.20 가운데를 말해요 - 1655 (0) 2020.03.19 교환 - 1039 (0) 2020.03.19