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 |
|
|
|
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 |