2369-Permutations 置换及其应用
题意就是
#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
#define M 1002
int per[M];
bool vis[M];
int ans;
int dfs(int x,int cnt)
{
vis[x]=1;
if(vis[per[x]])
return cnt;
return dfs(per[x],cnt+1);
}
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
int n,i,j,cnt,num;
while(cin>>n)
{
memset(vis,0,sizeof(vis));
memset(per,0,sizeof(per));
for(i=1;i<=n;i++)
scanf("%d",&per[i]);
ans=dfs(1,1);
for(i=2;i<=n;i++)
if(!vis[i])
{
num=dfs(i,1);
ans=ans/gcd(ans,num)*num;
}
cout<<ans<<endl;
}
return 0;
}
本文介绍了一个基于置换算法的问题解决方法,通过深度优先搜索实现循环结构的查找,并利用最大公约数算法来计算最终答案。代码示例清晰地展示了如何处理输入数据并进行置换计算。
3169

被折叠的 条评论
为什么被折叠?



