zoukankan      html  css  js  c++  java
  • Permutations

    题目链接:

    题目意思:给出一个n长度的序列,按照这个序列进行置换操作,问最小的循环节长度(即起始是1234....n,终也是1234....n)

    solve:我们只要求出每个位置的最小循环节就行了,然后求所有位置的最小公倍数,就是总的最小循环节

    #pragma GCC optimize("O3")
    #include <cstdio>
    //#include <tr1/unordered_map>
    using namespace std;
    #define ll long long
    #define fi first
    #define se second
    #define re register
    #define pb push_back
    const int N=1e6+10;
    const int mod=1e9+7;
    void read(int &a)
    {
        a=0;int d=1;char ch;
        while(ch=getchar(),ch>'9'||ch<'0')
            if(ch=='-')
                d=-1;
        a=ch^48;
        while(ch=getchar(),ch>='0'&&ch<='9')
            a=(a<<3)+(a<<1)+(ch^48);
        a*=d;
    }
    int gcd(int a,int b) {return !b?a:gcd(b,a%b);}
    int a[N];
    int main()
    {
        int n;
        read(n);
        for(re int i=1;i<=n;i++) read(a[i]);
        int ans=1;
        for(re int i=1;i<=n;i++)
        {
            int t=i;
            int cnt=1;
            while(a[t]!=i)
            {
                t=a[t];
                cnt++;
            }
            if(cnt) ans=ans/gcd(ans,cnt)*cnt;
        }
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    101. Symmetric Tree
    mfc实现对话框全屏置顶显示
    qq截图原理
    给对话框添加颜色
    mfc设置半透明对话框
    API介绍
    列表控件学习1
    VC++、MFC
    vs2010 产品密钥
    VS2008 视图资源.rc无法加载的问题及解决方法
  • 原文地址:https://www.cnblogs.com/acm1ruoji/p/12201225.html
Copyright © 2011-2022 走看看