Cod sursa(job #142695)

Utilizator crusRus Cristian crus Data 24 februarie 2008 22:26:38
Problema Koba Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>
#define input "koba.in"
#define output "koba.out"
int v[1001];
int t1,t2,t3,i,cs,cd;
long n;
long sol;
void citire()
{
 FILE *fin;
 fin=fopen(input,"r");
 fscanf(fin,"%ld %d %d %d",&n,&t1,&t2,&t3);
 fclose(fin);
}
int cauta(int n)
{
 int i;
 for (i=1;i<n-2;i++)
     if ((v[i]==v[n-2])&&(v[i+1]==v[n-1])&&(v[i+2]==v[n]))
	return i;
 return 0;
}
void solve()
{
 long nr,cate,rest;
 v[1]=t1%10; v[2]=t2%10; v[3]=t3%10;
 for (i=4;;i++)
     {
      v[i]=(v[i-1]+v[i-2]*v[i-3])%10;
      cs=cauta(i);
      if (cs) break;
     }
 cd=i-3;
 sol=0;
 if (cd<=n)
    {
    for (i=cs;i<=cd;i++) sol+=v[i];
    cate=(n-cs+1)/(cd-cs+1);
    rest=(n-cs+1)%(cd-cs+1);
    sol*=cate;
    for (i=1;i<cs;i++) sol+=v[i];
    for (i=cs;i<=cs+rest-1;i++) sol+=v[i];
    }
    else
    for (i=1;i<=n;i++) sol+=v[i];
}
void afisare()
{
 FILE *fout;
 fout=fopen(output,"w");
 fprintf(fout,"%ld",sol);
 fclose(fout);
}
int main()
{
 citire();
 solve();
 afisare();
 return 0;
}