Cod sursa(job #266993)

Utilizator skatesZaharescu Dragos skates Data 26 februarie 2009 16:29:26
Problema Cifra Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<iostream.h>
#include<fstream.h>
ifstream f("cifra.in");
ofstream g("cifra.out");
int uc[10][5],ucs[2],q=0,t,nrc=1,i,j;
long long nr[100][3];
void cit()
{f>>t;
 for(i=1; i<=t; i++)
  f>>nr[i][0], nr[i][1]=i;
}  

void ultcif()
{for(i=0; i<10; i++) uc[i][1]=i;
 for(i=0; i<10; i++) uc[i][2]=uc[i][1]*i%10;
 for(i=0; i<10; i++) uc[i][3]=uc[i][2]*i%10;
 for(i=0; i<10; i++) uc[i][4]=uc[i][3]*i%10;
}

void schimb(long long &a, long long &b, long long &c, long long &d)
{long long aux1, aux2;
 aux1=a; aux2=b; a=c; b=d; c=aux1; d=aux2;
}

void calc()
{ucs[1]=1; ucs[2]=4; i=3; q=3;
 while(nrc<t)
  {while(i<nr[nrc][2])
   {q++; if(q==5) q=1;
    ucs[i]=ucs[i-1];
    ucs[i]+=uc[i][q];
    ucs[i]%=10;
    i++;
   }
   nrc++;
  } 
}

void ord1()
{for(i=1; i<=t; i++)
  for(j=i+1; j<=t; j++)
   {if(nr[j][0]<nr[i][0]) schimb(nr[j][0], nr[j][1], nr[i][0], nr[i][1]);
   }
}

void ord2()
{for(i=1; i<=t; i++)
  for(j=i+1; j<=t; j++)
   {if(nr[j][1]<nr[i][1]) schimb(nr[j][0], nr[j][1], nr[i][0], nr[i][1]);
   }
}      
void scrie()
{for(i=1; i<=t; i++)
 {g<<nr[i][0]<<'\n';
 }
} 

int main()
{cit(); ultcif(); ord1(); calc(); ord2(); scrie();
 f.close(); g.close(); return 0;
}