Cod sursa(job #2163056)

Utilizator cristina-criCristina cristina-cri Data 12 martie 2018 16:36:09
Problema Permutari2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <cstdio>
#include <bitset>

using namespace std;

int n;
int f[100005];
bitset <100005>viz;

long long cmmdc(long long a, long long b)
{
    while(b)
    {
        int r=a%b;
        a=b;
        b=r;
    }
    return a;
}

long long cmmmc(long long a, long long b)
{
    long long d=a/cmmdc(a, b);
    return d*b;
}

int main()
{

    freopen("permutari2.in", "r", stdin);
    freopen("permutari2.out", "w", stdout);

    scanf("%d", &n);
    for(int i=1; i<=n; i++)
    {
        scanf("%d", &f[i]);
    }
    long long cm=1;
    for(int i=1; i<=n; i++)
    {
        if(viz[i] == 0)
        {
            int aux=i;
            long long nr=0;
            while(viz[aux] != 1)
            {
                viz[aux]=1;
                aux=f[aux];
                nr++;
            }
            cm=cmmmc(cm, nr);
        }
    }
    printf("%lld", cm-1);
    return 0;
}