记录编号 |
77709 |
评测结果 |
AAAAAAAAAA |
题目名称 |
eins |
最终得分 |
100 |
用户昵称 |
digital-T |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
5.235 s |
提交时间 |
2013-11-02 14:13:09 |
内存使用 |
0.31 MiB |
显示代码纯文本
#include<fstream>
using namespace std;
ifstream fi("eins.in");
ofstream fo("eins.out");
int p;
class mat
{
public:
int x,y;
long long ma[3][3];
};
mat operator *(mat &a,mat &b)
{
mat t;
int i,j,k;
t.x=a.x;
t.y=b.y;
for(i=1;i<=a.x;i++)
{
for(j=1;j<=b.y;j++)
{
t.ma[i][j]=0;
for(k=1;k<=a.y;k++)
{
t.ma[i][j]=(t.ma[i][j]+(a.ma[i][k]*b.ma[k][j]))%p;
}
t.ma[i][j]%=p;
}
}
return t;
}
mat pow(mat x,int n)
{
if(n==1)return x;
mat t=pow(x,n/2);
if(n%2==0)return t*t;
if(n%2==1)
{
t=t*t;
return t*x;
}
}
int main()
{
int n,t,i;
mat ans,T,O;
fi>>n;
T.x=2;T.y=2;
T.ma[1][1]=1;
T.ma[1][2]=1;
T.ma[2][1]=1;
T.ma[2][2]=0;
O.x=1;O.y=2;
O.ma[1][1]=1;
O.ma[1][2]=0;
for(i=1;i<=n;i++)
{
fi>>t>>p;
if(t==0)
{
fo<<"0"<<endl;
continue;
}
ans=pow(T,t);
ans=O*ans;
fo<<ans.ma[1][2]<<endl;
}
return 0;
}