Cod sursa(job #473124)

Utilizator andrey932Andrei andrey932 Data 28 iulie 2010 09:50:07
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <iostream>
#include <stdio.h>
using namespace std;
FILE *fin=fopen("perm2.in","r"),*fout=fopen("perm2.out","w");
int n,p[21000],i,c,s[21000],sc,inc,l,t[21000],rez;
int cmmmc(int a, int b) {
	int ca=a,cb=b;
	while (a>0&&b>0) {
		if (a>b) a%=b;
		else b%=a;
	}
	if (b>a) a=b;
	return (ca/a*cb);
}

int main()
{
	fscanf(fin,"%i",&n);
	for(i=1;i<=n;i++) {
		fscanf(fin,"%i",&c);
		p[i]=c;
	}
	sc=1; rez=1;
	for(i=1;i<=n;i++) {
		if (t[i]==0) {
			l=1; sc=1; s[1]=i; inc=i; c=p[i];
			while (inc!=c) {
				sc++;
				l++;
				s[sc]=c;				
				c=p[c];
			}
			for(int j=1;j<=sc;j++) {				
				t[s[j]]=l;
			}
			rez=cmmmc(rez,l);			
		}		
	}
	fprintf(fout,"%i \n",rez);
	fclose(fout);
	return 0;
}