반응형
https://www.acmicpc.net/problem/17827
17827번: 달팽이 리스트
첫째 줄에 노드의 개수 N(2 ≤ N ≤ 200,000), 질문의 횟수 M(1 ≤ M ≤ 200,000), N번 노드가 가리키는 노드의 번호 V(2 ≤ V ≤ N)가 공백으로 구분되어 주어진다. 둘째 줄에 N개의 정수 C1, C2, …, CN이 공백
www.acmicpc.net
순회하는 공식을 찾는 수학문제였습니다.
풀이방법
1. 1번노드를 제외한 2번부터 사이클의 첫 번째이므로 v의 값을 입력받은뒤 1을 빼줘야 합니다. 그 외 적절히 입력받습니다.
2. k < n인 경우에는 사이클을 순회하지 않으므로 그대로 k번째 값을 출력합니다. 이외의 경우에는 사이클을 적절히 돌게 됩니다. 사이클에 해당하지 않는 노드의 방문에 해당하는 k-v값에 대해 cycle만큼 돈 후의 위치를 얻고 다시 v만큼 더한 부분을 출력해줍니다.
Code
#include <bits/stdc++.h>
#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
int n, m, v, snail[200001];
int main(){
fastio;
cin >> n >> m >> v;
for(int i = 0; i < n; i++) cin >> snail[i];
v--;
int cycle = n - v;
for(int i = 1, k; i <= m; i++){
cin >> k;
if(k < n) cout << snail[k] << '\n';
else cout << snail[(k-v) % cycle + v] << '\n';
}
}
'Algorithm > Math' 카테고리의 다른 글
(C++) - 백준(BOJ) 1284번 : 집 주소 (0) | 2021.08.15 |
---|---|
(C++) - 백준(BOJ) 13458번 : 시험감독 (0) | 2021.08.02 |
(C++) - 백준(BOJ) 21739번 : 펭귄 네비게이터 (0) | 2021.07.26 |
(C++) - 백준(BOJ) 1837번 : 암호제작 (0) | 2021.07.23 |
(C++) - 백준(BOJ) 2981번 : 검문 (0) | 2021.07.19 |