涉及矩阵加速递推
我第一个点就TLE了,求调
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#define int long long
using namespace std;
int s,p,n;
void wr(int x)
{
if(x<0)
x=-x,putchar('-');
if(x>9)
wr(x/10);
putchar(x%10+'0');
}
struct matrix
{
int num[3][3]={};//矩阵
}c,e;
matrix operator *(const matrix a,const matrix b)//矩阵乘法
{
matrix ans={};
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
for(int k=1;k<=2;k++)
ans.num[i][j]+=a.num[i][k]*b.num[k][j];
return ans;
}
matrix ksm(matrix a,int k)
{
matrix ans={};
for(int i=1;i<=2;i++)
ans.num[i][i]=1;
for(;k;k>>=1,a=a*a)
if(k&1)
ans=ans*a;
return ans;
}
signed main()
{
while(scanf("%lld%lld%lld",&s,&p,&n)==3)
{
e.num[1][1]=0,e.num[2][1]=1,e.num[1][2]=-p,e.num[2][2]=s;
c.num[1][1]=s,c.num[1][2]=s*s-2*p;
c=c*ksm(e,n-1);
wr(c.num[1][1]);
putchar('\n');
}
return 0;
}