HDU 5950

int main()
{
    int t;
    matrix ans,base;
    scanf("%d",&t);
    LL n,a,b;
    while(t--)
    {
        scanf("%I64d%I64d%I64d",&n,&a,&b);
        memset(ans.m,0,sizeof(ans.m));
        ans.m[0][0]=a%MOD;ans.m[1][0]=b%MOD;ans.m[2][0]=81;ans.m[3][0]=27;ans.m[4][0]=9;ans.m[5][0]=3;ans.m[6][0]=1;//n=1
        base.m[0][0]=0;base.m[0][1]=1;base.m[0][2]=0;base.m[0][3]=0;base.m[0][4]=0;base.m[0][5]=0;base.m[0][6]=0;
        base.m[1][0]=2;base.m[1][1]=1;base.m[1][2]=1;base.m[1][3]=0;base.m[1][4]=0;base.m[1][5]=0;base.m[1][6]=0;
        base.m[2][0]=0;base.m[2][1]=0;base.m[2][2]=1;base.m[2][3]=4;base.m[2][4]=6;base.m[2][5]=4;base.m[2][6]=1;
        base.m[3][0]=0;base.m[3][1]=0;base.m[3][2]=0;base.m[3][3]=1;base.m[3][4]=3;base.m[3][5]=3;base.m[3][6]=1;
        base.m[4][0]=0;base.m[4][1]=0;base.m[4][2]=0;base.m[4][3]=0;base.m[4][4]=1;base.m[4][5]=2;base.m[4][6]=1;
        base.m[5][0]=0;base.m[5][1]=0;base.m[5][2]=0;base.m[5][3]=0;base.m[5][4]=0;base.m[5][5]=1;base.m[5][6]=1;
        base.m[6][0]=0;base.m[6][1]=0;base.m[6][2]=0;base.m[6][3]=0;base.m[6][4]=0;base.m[6][5]=0;base.m[6][6]=1;
        ans=mul(pow(base,n-1),ans);
        LL out=ans.m[0][0];
        printf("%I64d\n",out);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值