Pagini recente » Cod sursa (job #1564248) | Cod sursa (job #1262319) | Cod sursa (job #3228557) | Cod sursa (job #2598794) | Cod sursa (job #2905187)
#include <fstream>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
long long bottom[3][3], copie[3][3];
void inmultire_matrici(long long a[3][3], long long b[3][3])
{
long long auxiliar[3][3];
for(int i=0; i<3; i++)
for(int j=0; j<3; j++)
{
auxiliar[i][j]=0;
for(int k=0; k<3; k++)
auxiliar[i][j]+=(a[i][k]*b[k][j])%666013;
}
for(int i=0; i<3; i++)
for(int j=0; j<3; j++)
a[i][j]=auxiliar[i][j];
}
void ridicare_la_putere(long long exponent)
{
while(exponent)
if(exponent%2==0)
inmultire_matrici(bottom, bottom), exponent/=2;
else
exponent--, inmultire_matrici(copie, bottom);
}
int main()
{
int numar_iepuri_1, numar_ziua_1, numar_ziua_2, numar_adunari_alaltaieri, numar_adunari_ieri, numar_adunari_vechi_vechi, ZIUA_APOCALIPTICA;
long long seturi;
fin >> seturi;
for(long long i=1; i<=seturi; i++)
{
fin >> numar_iepuri_1 >> numar_ziua_1 >> numar_ziua_2 >> numar_adunari_ieri >> numar_adunari_alaltaieri >> numar_adunari_vechi_vechi >> ZIUA_APOCALIPTICA;
bottom[0][0]=0;
bottom[0][1]=1;
bottom[0][2]=0;
bottom[1][0]=0;
bottom[1][1]=0;
bottom[1][2]=1;
bottom[2][0]=numar_adunari_vechi_vechi;
bottom[2][1]=numar_adunari_alaltaieri;
bottom[2][2]=numar_adunari_ieri;
for(int k=0; k<3; k++)
for(int l=0; l<3; l++)
copie[k][l]=bottom[k][l];
ridicare_la_putere(ZIUA_APOCALIPTICA-3);
fout << ((copie[2][0]*numar_iepuri_1+numar_ziua_1*copie[2][1])%666013+copie[2][2]*numar_ziua_2)%666013 <<'\n';
for(int k=0; k<3; k++)
for(int l=0; l<3; l++)
bottom[k][l]=0, copie[k][l]=0;
}
}