比赛 2022级数学专题练习赛6 评测结果 WAWWWWWWWW
题目名称 洗牌机 最终得分 10
用户昵称 op_组撒头屯 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2023-01-23 21:32:41
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1000+5;
int n,m;
int tot=0;
int to[N],id[N],pos[N];
vector<int>v[N];
bool vis[N]={0};
void dfs(int pt){
	id[pt]=tot;v[tot].push_back(pt);
	pos[pt]=v[tot].size()-1;vis[pt]=1;
	if (!vis[to[pt]])dfs(to[pt]);
}
int main(){
	freopen ("shuffle.in","r",stdin);
	freopen ("shuffle.out","w",stdout);
	scanf ("%d%d",&n,&m);
	for (int i=1;i<=n;i++){
	    int x;scanf("%d",&x);
	    to[x]=i;
    }
	for (int i=1;i<=n;i++){
		if (!vis[i])tot++,dfs(i);
	}
	for (int i=1;i<=n;i++){
		int cnt=v[id[i]].size();
		int p=m%cnt,x=pos[i];
		printf("%d\n",v[id[i]][((x-p)%cnt+cnt)%cnt]);
	}
	return 0;
}