알고리즘
백준 17827번 달팽이 리스트 C++
영춘권의달인
2023. 3. 18. 11:30
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
한칸씩 이동하면서 탐색을 하면 무조건 시간초과가 날 것 같아서 같은 구간이 반복되는 것을 이용해서 나머지 연산을 통해 문제를 해결하였다.
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <list>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
#include <limits.h>
using namespace std;
using int64 = long long;
vector<int> graph;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, m, v;
cin >> n >> m >> v;
int cycleLen = n - v + 1;
graph = vector<int>(n + 1);
for (int i = 1; i <= n; i++) cin >> graph[i];
for (int i = 0; i < m; i++) {
int k, index;
cin >> k;
if (k < n) index = k + 1;
else {
k = k - v + 1;
k = k % cycleLen;
index = k + v;
}
cout << graph[index] << "\n";
}
}