这是我的AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,k;
int arr[505][505];
map<pair<int,int> ,int> mp;
vector<pair<int,int> > vt;
int main(){
scanf("%lld%lld",&n,&k);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&arr[i][j]);
}
}
if(k==1){
printf("1");
return 0;
}
int i=2,j=1;
ll cnt=2;
if(k==2){
printf("2");
return 0;
}
while(1){
if(mp[{i,j}]){
break;
}
mp[{i,j}]=cnt-1;
vt.push_back({i,j});
cnt++;
int t=i;
i=arr[i][j];
j=t;
}
int cnts=mp[{i,j}];
int p=(int)vt.size()-cnts+1;
if(k<cnts) printf("%d",vt[k-1].first);
else printf("%d",vt[(k-cnts-1)%p+cnts-1].first);
return 0;
}
如题,加上注释处的特判(这个特判是正确的)可以AC,不加会WA一个点,但是我测试了一些k==2的数据可以通过(当然很可能是我的数据太水)
希望大佬能指出哪里错了或者提供hack数据orz