
Untitled
By: a guest on
May 11th, 2012 | syntax:
C++ | size: 2.64 KB | hits: 22 | expires: Never
#include<iostream>
#include<string>
#include<string.h>
#include<sstream>
#include<ctype.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<stack>
#include<fstream>
#include<stdlib.h>
#include<vector>
#include<map>
#include<utility>
#include<iomanip>
#include<queue>
#define eps 1e-9
#define max(a,b) ((a>b)?a:b)
#define min(a,b) ((a<b)?a:b)
#define pb(a) push_back(a)
#define mp(a,b) make_pair(a,b)
#define pi acos(-1.0)
#define SET(a) memset(a,-1,sizeof a)
#define CLR(a) memset(a,0,sizeof a)
#define inf 2000000000
using namespace std;
unsigned long long MOD=pow(2,64);
struct matrix
{
int row,col;
unsigned long long cell[3][3];
};
matrix res,base,mat,ID;
matrix mult(matrix a,matrix b)
{
matrix temp;
temp.row=a.row;
temp.col=b.col;
for(int i=0;i<a.row;i++)
{
for(int j=0;j<b.col;j++)
{
unsigned long long sum=0;
for(int k=0;k<a.col;k++)
{
sum=(sum+(((a.cell[i][k]%MOD)*(b.cell[k][j]%MOD))%MOD))%MOD;
}
temp.cell[i][j]=sum;
}
}
return temp;
}
matrix mat_expo(matrix a,int n)
{
matrix ret=ID;
while(n)
{
if(n&1) ret=mult(ret,a);
n>>=1;
a=mult(a,a);
}
return ret;
}
int main()
{
int t,kk=1;
unsigned long long n,p,q;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
res.cell[i][j]=mat.cell[i][j]=base.cell[i][j]=0;
if(i==j) ID.cell[i][j]=1;
else ID.cell[i][j]=0;
}
base.row=base.col=ID.row=ID.col=mat.row=res.row=3;
mat.col=res.col=1;
cin>>t;
while(t--)
{
cin>>p>>q>>n; //p (a+b) q ab
base.cell[0][0]=base.cell[0][1]=mat.cell[0][0]=p%MOD; // (a+b)
base.cell[0][2]=(-1) %MOD;
base.cell[1][2]=1%MOD;
base.cell[2][0]=((3%MOD)*(q%MOD))%MOD; //3ab
mat.cell[2][0]=((2%MOD)*(q%MOD))%MOD; //2ab
/*
for(int i=0;i<base.row;i++)
{
for(int j=0;j<base.col;j++)
cout<<base.cell[i][j]<<" ";
cout<<endl;
}*/
cout<<"Case "<<kk++<<": ";
if(n<=1)
{
if(n==0) cout<<2%MOD<<endl;
else {
cout<<p%MOD<<endl;
}
}
else {
matrix A;
A=mat_expo(base,n-1);
res=mult(A,mat);
cout<<res.cell[0][0]<<endl;
}
}
return 0;
}