"红色病毒"问题

http://acm.hdu.edu.cn/showproblem.php?pid=2065

矩阵乘法推出递推公式。

View Code
Matrix tmp(4,4);

void get_init() {
    int i,j,k;
    for(i=0;i<4;i++) for(j=0;j<4;j++) tmp(i,j)=1;
    for(i=0;i<4;i++) tmp(i,i)=2, tmp(i,3-i)=0;
}
void solve() {
    int i,j,k;
    Matrix ans(1,4), tt=tmp;
    ans(0,0)=ans(0,3)=1;
    ans(0,1)=0;ans(0,2)=2;
    scanf("%I64d",&N);
    tt=tt^(N-1);
    ans=ans*tt;
    printcase();
    printf("%d\n",ans(0,2));
}

int main() {
    int ca;
    get_init();
    while(scanf("%d",&ca), ca) {
        g=1; while(ca--) solve(); printf("\n");
    }
    return 0;
}

 

posted @ 2013-04-11 21:10  zhang1107  阅读(189)  评论(0编辑  收藏  举报