Pagini recente » Monitorul de evaluare | Cod sursa (job #1231617) | simulare_oji2015 | Cod sursa (job #1681866)
#include <cstdio>
#define MAXN 500
#define MAXNR 1000
int d[2][MAXNR+1][150],cif[2][MAXNR+1];
inline int cmmdc(int a,int b){
int r;
while(b>0){
r=a%b;
a=b;
b=r;
}
return a;
}
inline int getmax(int a,int b){
if(a>b) return a;
return b;
}
int main(){
FILE*fi,*fout;
int i,n,nr,j,x,t,y,max;
fi=fopen("indep.in" ,"r");
fout=fopen("indep.out" ,"w");
fscanf(fi,"%d" ,&n);
max=0;
for(i=1;i<=n;i++){
fscanf(fi,"%d" ,&nr);
d[i&1][nr][0]=cif[i&1][nr]=1;
for(x=1;x<=max;x++){
t=0;
for(j=0;t>0||j<getmax(cif[i&1][x],cif[1-i&1][x]);j++){
if(nr==x&&j==0)
t=t+d[i&1][x][j]+d[1-i&1][x][j];
else
t=t+d[1-i&1][x][j];
d[i&1][x][j]=t%10;
t/=10;
}
cif[i&1][x]=j;
}
for(x=1;x<=max;x++){
t=0;
y=cmmdc(x,nr);
for(j=0;t>0||j<getmax(cif[i&1][y],cif[1-i&1][x]);j++){
t=t+d[i&1][y][j]+d[1-i&1][x][j];
d[i&1][y][j]=t%10;
t/=10;
}
cif[i&1][y]=j;
}
if(max<nr)
max=nr;
}
for(i=cif[n&1][1]-1;i>=0;i--)
fprintf(fout,"%d" ,d[n&1][1][i]);
fclose(fi);
fclose(fout);
return 0;
}