Pagini recente » Cod sursa (job #224154) | Cod sursa (job #817252) | Cod sursa (job #1860224) | Cod sursa (job #957771) | Cod sursa (job #858267)
Cod sursa(job #858267)
#include <fstream>
#define Nmax (1<<10)
#define Nr(i) (100*T[Norm(i)]+10*T[Norm(i-1)]+T[Norm(i-2)])
#define Norm(i) ((i-1)%4)
using namespace std;
int N,T[4],Sum,V[Nmax],Hash[Nmax];
void Solve() {
int i,L,Rest;
T[0]%=10;
T[1]%=10;
T[2]%=10;
Sum=T[0]+T[1]+T[2];
Hash[Nr(3)]=3;
V[3]=Sum;
for(i=4;i<=N;i++) {
T[Norm(i)]=(T[Norm(i-1)]+T[Norm(i-2)]*T[Norm(i-3)])%10;
Sum+=T[Norm(i)];
V[i]=Sum;
if(Hash[Nr(i)]) {
L=i-Hash[Nr(i)];
Rest=N-i;
Sum+=(V[i]-V[Hash[Nr(i)]])*(Rest/L);
Sum+=V[Hash[Nr(i)]+Rest%L]-V[Hash[Nr(i)]];
break;
}
else
Hash[Nr(i)]=i;
}
}
void Read() {
ifstream in("koba.in");
in>>N>>T[0]>>T[1]>>T[2];
in.close();
}
void Write() {
ofstream out("koba.out");
out<<Sum<<'\n';
out.close();
}
int main() {
Read();
Solve();
Write();
return 0;
}