Submission #62480724


Source Code Expand

#include <bits/stdc++.h>
using lint = long long;
const int N = 1e6 + 10;
const int INF = 0x3f3f3f3f;

std::string k;
std::vector<int> g[N];
int n, s;

bool flag;
int cnt, ed = -1, dis[N], nodes[N];
// dfn 记录遍历到的点

void dfs(int u, int f) {
	nodes[++cnt] = u;
	dis[u] = dis[f] + 1;
	for (auto v : g[u]) {
		if (flag) return ;
		if (dis[v] != INF) { // 环
			ed = v;
			flag = true;
			return ;
		}
		dfs(v, u);
	}
	if (flag) return ;
	--cnt;
}

lint mod(std::string a, lint b) {
	lint res = 0;
	for (auto ch : a) res = (res * 10 + ch - '0') % b;
	return res;
}

bool cmp(const std::string &a, const std::string &b) {
	if (a.size() != b.size()) return a.size() < b.size();
	for (size_t i = 0; i < a.size(); ++i) {
		if (a[i] < b[i]) return true;
	}
	return false;
}

int main() {
	std::cin.tie(0)->sync_with_stdio(0);
	std::cin >> n >> s >> k;
	for (int u = 1, v; u <= n; ++u) {
		std::cin >> v;
		g[u].push_back(v);
	}
	memset(dis, 0x3f, sizeof(dis));
	dis[0] = 0;
	
	dfs(s, 0);
	
	//	 从 a 出发没有环,则 k 不可能很大,直接 DFS/ans 直接可以求出
	if (ed == -1 || (k.size() <= 10 && cmp(k, std::to_string(cnt))))
		return std::cout << nodes[stoi(k) + 1] << std::endl, 0;
	
	// 存在环, ed 就是环的起点,在 nodes 中找到 ed 就可确定长度
	int id = -1;
	for (int i = 1; i <= cnt; ++i)
		if (nodes[i] == ed) {
			id = i;
			break;
		}
	
	int len = cnt - id + 1;
	
	int r = (mod(k, len) - (dis[ed] - 2) % len + len) % len;
	
	if (r == 0) r = len;
	
	std::cout << nodes[id + r - 1] << std::endl;
	
	return 0;
}

Submission Info

Submission Time
Task D - へんてこ辞書
User OIer_wst
Language C++ 20 (gcc 12.2)
Score 100
Code Size 1632 Byte
Status AC
Exec Time 15 ms
Memory 12612 KiB

Judge Result

Set Name Sample Subtask1 All
Score / Max Score 0 / 0 50 / 50 50 / 50
Status
AC × 2
AC × 12
AC × 25
Set Name Test Cases
Sample subtask0_sample_01.txt, subtask0_sample_03.txt
Subtask1 subtask0_0.txt, subtask0_1.txt, subtask0_2.txt, subtask0_3.txt, subtask0_4.txt, subtask0_5.txt, subtask0_6.txt, subtask0_7.txt, subtask0_8.txt, subtask0_9.txt, subtask0_sample_01.txt, subtask0_sample_03.txt
All subtask0_0.txt, subtask0_1.txt, subtask0_2.txt, subtask0_3.txt, subtask0_4.txt, subtask0_5.txt, subtask0_6.txt, subtask0_7.txt, subtask0_8.txt, subtask0_9.txt, subtask0_sample_01.txt, subtask0_sample_03.txt, subtask1_0.txt, subtask1_1.txt, subtask1_10.txt, subtask1_11.txt, subtask1_2.txt, subtask1_3.txt, subtask1_4.txt, subtask1_5.txt, subtask1_6.txt, subtask1_7.txt, subtask1_8.txt, subtask1_9.txt, subtask1_sample_02.txt
Case Name Status Exec Time Memory
subtask0_0.txt AC 14 ms 12220 KiB
subtask0_1.txt AC 12 ms 11500 KiB
subtask0_2.txt AC 12 ms 11900 KiB
subtask0_3.txt AC 11 ms 10720 KiB
subtask0_4.txt AC 13 ms 12400 KiB
subtask0_5.txt AC 11 ms 11200 KiB
subtask0_6.txt AC 11 ms 10712 KiB
subtask0_7.txt AC 12 ms 11760 KiB
subtask0_8.txt AC 11 ms 10744 KiB
subtask0_9.txt AC 13 ms 12124 KiB
subtask0_sample_01.txt AC 6 ms 7376 KiB
subtask0_sample_03.txt AC 6 ms 7468 KiB
subtask1_0.txt AC 12 ms 10964 KiB
subtask1_1.txt AC 13 ms 11628 KiB
subtask1_10.txt AC 15 ms 12612 KiB
subtask1_11.txt AC 7 ms 7392 KiB
subtask1_2.txt AC 11 ms 10944 KiB
subtask1_3.txt AC 10 ms 10236 KiB
subtask1_4.txt AC 11 ms 10648 KiB
subtask1_5.txt AC 13 ms 11916 KiB
subtask1_6.txt AC 11 ms 10544 KiB
subtask1_7.txt AC 11 ms 10276 KiB
subtask1_8.txt AC 14 ms 12568 KiB
subtask1_9.txt AC 15 ms 12556 KiB
subtask1_sample_02.txt AC 6 ms 7472 KiB