Quad Tiling [POJ 3420]

http://poj.org/problem?id=3420

View Code
//矩阵乘法做递推
Matrix mat(16,16);
void get_init() {
    mat.reset();
    mat(0,15)=mat(1,14)=mat(2,13)=1;
    mat(3,12)=mat(3,15)=mat(4,11)=1;
    mat(5,10)=mat(6,9)=mat(6,15)=1;
    mat(7,8)=mat(7,14)=mat(7,11)=1;
    mat(8,7)=mat(9,6)=mat(10,5)=1;
    mat(11,4)=mat(11,7)=mat(12,15)=1;
    mat(12,3)=mat(13,2)=1;
    mat(13,14)=mat(14,1)=mat(14,7)=1;
    mat(14,13)=mat(15,12)=mat(15,6)=1;
    mat(15,15)=mat(15,3)=mat(15,0)=1;
}

void solve() {
    Matrix ans(16,16);
    ans=mat^N;
    printf("%d\n",ans(15,15));
}

int main() {
    get_init();
    while(scanf("%d%d",&N,&mod),N+mod) solve();
    return 0;
}

 

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