Cod sursa(job #1538013)

Utilizator herbertoHerbert Mohanu herberto Data 28 noiembrie 2015 13:30:34
Problema Iepuri Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <stdio.h>
#include <stdlib.h>
#define MOD 666013

long long rez[5][5], i[5][5], ic[5][5], rezc[5][5];
int main(){
  FILE*fin=fopen("iepuri.in", "r");
  FILE*fout=fopen("iepuri.out", "w");
//  x y z -> y z a*x+b*y+c*z
//  0 0 c
//  1 0 b
//  0 1 a
//1 zi-x
//2 zi-y
//3 zi-z
  int n, j, p, nrzile, f, k, s, pr;
  long long a, b, c, x, y, z;
  fscanf(fin, "%d", &n);
  for(pr=1; pr<=n; pr++){
//    printf("%d", pr);
    fscanf(fin, "%lld%lld%lld%lld%lld%lld%d", &x, &y, &z, &a, &b, &c, &nrzile);
//    printf)
    for(f=1; f<=3; f++)
      for(j=1; j<=3; j++)
        rez[f][j]=i[f][j]=rez[f][j]=ic[f][j]=0;

//    i[1][1]=x; i[1][2]=y; i[1][3]=z;
    i[2][1]=i[3][2]=1;
    i[1][3]=c; i[2][3]=b; i[3][3]=a;

    rez[1][1]=rez[2][2]=rez[3][3]=1;
    for(f=1; f<=3; f++)
      for(j=1; j<=3; j++){
        rezc[f][j]=rez[f][j];
        ic[f][j]=i[f][j];
      }

    k=nrzile-2;
    while(k>0){
      if(k%2==1){
        for(f=1; f<=3; f++)
          for(j=1; j<=3; j++){
            s=0;
            for(p=1; p<=3; p++)
              s=s+rezc[f][p]*i[p][j];

            rez[f][j]=s;
          }

        k--;
      }
      else{
        k/=2;
        for(f=1; f<=3; f++)
          for(j=1; j<=3; j++){
            s=0;
            for(p=1; p<=3; p++)
              s=s+ic[f][p]*ic[p][j];

            i[f][j]=s;
          }
      }

      for(f=1; f<=3; f++)
        for(j=1; j<=3; j++){
          rez[f][j]%=MOD;
          rezc[f][j]=rez[f][j];
          i[f][j]%=MOD;
          ic[f][j]=i[f][j];
        }
    }

    fprintf(fout, "%lld\n", (x*rez[1][3]%MOD+y*rez[2][3]%MOD+z*rez[3][3]%MOD)%MOD);
  }
  return 0;
}