Submission #1838047


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

#define rep(i,n) for(int (i)=0;(i)<(int)(n);(i)++)
#define rept(i,n) for(int (i)=0;(i)<=(int)(n);(i)++)
#define reps(i,s,n) for(int (i)=(s);(i)<(int)(n);(i)++)
#define repst(i,s,n) for(int (i)=(s);(i)<=(int)(n);(i)++)
#define repr(i,n) for(int (i)=(n);(i)>=0;(i)--)
#define each(itr,v) for(auto (itr):(v))
#define all(c) c.begin(),c.end()
#define pb push_back
#define mp(x,y) make_pair((x),(y))
#define fi first
#define se second
#define chmin(x,y) x=min(x,y)
#define chmax(x,y) x=max(x,y)
#define ln "\n"
#define show(x) cout << #x << " = " << x ln
#define dbg(x) cout<<#x"="<<x ln

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vector<int>> mat;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

const int inf = (int)1e9;
const ll linf = (ll)1e18;
const int mod = (int)(1e9+7);
const int dx[] = {0, 1, 0, -1};
const int dy[] = {1, 0, -1, 0};
const int ddx[] = {0, 1, 1, 1, 0, -1, -1, -1};
const int ddy[] = {1, 1, 0, -1, -1, -1, 0, 1};

struct oreno_initializer {
	oreno_initializer() {
		cin.tie(0);
		ios::sync_with_stdio(0);
	}
} oreno_initializer;

// ⊂ニニニニニニニニニニニニニ( ^ω^)ニニニニニニニニニニニニニ⊃

int n, a, b[100000];
bool u[100000];
vi l;
string k;

int main() {
	cin >> n >> a >> k;
	a--;
	u[a] = true;
	l.pb(a);
	rep(i,n) {
		cin >> b[i];
		b[i]--;
	}
	
	// k<10^6なら閉路とか周期を考えるまでもなくシミュレートする
	// ここに引っかからなかった場合は必ずn <= 10^5 < kなので閉路に到達する
	if (k.length()<=6) {
		int kk = stoi(k);
		rep(i,kk) a = b[a];
		cout << a+1 <<ln;
		return 0;
	}
	
	int cyc = 0;
	while (true) {
		a = b[a];
		cyc++;
		if (u[a]) break;
		u[a] = true;
		l.pb(a);
 	}
	int pre = 0;
	rep(i,l.size()) {
		if (l[i]==a) {
			cyc -= i;
			pre = i;
			break;
		}
	}
	/*
	rep(i,pre) cout << l[i]+1 << " ";
	cout << "という" << pre << "個の前置きの後、" << pre << "ステップ目から周期" << cyc << "で" << ln;
	rep(i,cyc) cout << l[pre+i]+1 << " ";
	cout << "\nを繰り返す" << ln;
	*/
	
	int kmodc = 0;
	rep(i,k.length()) kmodc = (kmodc*10 + (k[i]-'0'))%cyc;
	while (kmodc<pre) kmodc += cyc;
	kmodc = (kmodc-pre)%cyc;
	cout << l[pre+kmodc]+1 << ln;
}

Submission Info

Submission Time
Task D - へんてこ辞書
User creep04
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2377 Byte
Status AC
Exec Time 10 ms
Memory 976 KB

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 8 ms 768 KB
subtask0_1.txt AC 7 ms 640 KB
subtask0_2.txt AC 8 ms 640 KB
subtask0_3.txt AC 6 ms 512 KB
subtask0_4.txt AC 8 ms 768 KB
subtask0_5.txt AC 7 ms 640 KB
subtask0_6.txt AC 6 ms 512 KB
subtask0_7.txt AC 8 ms 640 KB
subtask0_8.txt AC 6 ms 512 KB
subtask0_9.txt AC 8 ms 640 KB
subtask0_sample_01.txt AC 1 ms 256 KB
subtask0_sample_03.txt AC 1 ms 256 KB
subtask1_0.txt AC 7 ms 768 KB
subtask1_1.txt AC 8 ms 768 KB
subtask1_10.txt AC 10 ms 976 KB
subtask1_11.txt AC 1 ms 256 KB
subtask1_2.txt AC 7 ms 748 KB
subtask1_3.txt AC 6 ms 640 KB
subtask1_4.txt AC 6 ms 640 KB
subtask1_5.txt AC 8 ms 768 KB
subtask1_6.txt AC 7 ms 720 KB
subtask1_7.txt AC 6 ms 640 KB
subtask1_8.txt AC 9 ms 896 KB
subtask1_9.txt AC 9 ms 896 KB
subtask1_sample_02.txt AC 1 ms 256 KB