WA on #3 求调玄关
查看原帖
WA on #3 求调玄关
942910
wcr_jason楼主2024/12/13 11:07

样例没有问题,实在调不出来了,请教大佬

悬2关

#include<iostream>
#include<vector>
#define rep(a,b,c) for(int (a)=(b);(a)<=(c);(a)++)
#define req(a,b,c) for(int (a)=(b);(a)>=(c);(a)--)
#define pii pair<int,int>
#define ll long long
#define ull unsigned ll
using namespace std;
const int N=2e5+5;
vector<ll> c[N];
ll a[N],n,k,cur,vis[N],ne[N];
ll fsp(ll a,ll b,ll p){
	ll ans=1;
	while(b){
		if(b%2){
			ans=(ans*a)%p;
		}
		a=(a*a)%p;
		b/=2;
	}
	return ans;
}
void dfs(int now,int i){
	if(now==i){
		return;
	}
	c[cur].push_back(now);
	vis[now]=cur;
	dfs(a[now],i);
}
int main(){
	cin>>n>>k;
	rep(i,1,n){
		cin>>a[i];
	}
	rep(i,1,n){
		if(!vis[i]){
			c[++cur].push_back(i);
			vis[i]=cur;
			dfs(a[i],i);
		}
	}	
	rep(i,1,cur){
		ll now=k%c[i].size();
		rep(j,0,c[i].size()-1){
			ll y=fsp(2,now,c[i].size());
			ll x=(j+y)%c[i].size();
			ne[c[i][j]]=c[i][x];
		}
	}
	rep(i,1,n){
		cout<<ne[i]<<" ";
	}
	return 0;
}
2024/12/13 11:07
加载中...