数格子题解

18 篇文章 0 订阅

题目描述

你有多少种方法用2x1的多米诺骨牌填满4xN的矩形。 答案会很大,所以你只需输出答案模M的值。
输入输出格式
输入格式:
读入包括多组测试数据,以两个0结尾。 每组数据包含两个整数,N,M。
输出格式:
每行输出答案模M的值
输入输出样例
输入样例#1:
1 10000
3 10000
5 10000
0 0
输出样例#1:
1
11
95

分析

打表找规律,可得到一个递推式:an=an-1+5*an-2+an-3-an-4,应算即可,注意因内存原因不要开数组
时间:0ms。

#include<bits/stdc++.h>
using namespace std;
int cl(int x,int y){
    if(x==1) return 1%y;
    if(x==2) return 5%y;
    if(x==3) return 11%y;
    if(x==4) return 36%y;
    int a4=1,a3=5,a2=11,a1=36,x1,x2,x3,ans=0;
    for(int i=5;i<=x;i++){
        ans=(a1+5*a2+a3-a4+y)%y;
        x1=a1,x2=a2,x3=a3;
        a1=ans,a2=x1,a3=x2,a4=x3;
    }
    return ans;
}
int main(){
    int m,n;
    while(1){
        scanf("%d%d",&n,&m);
        if(n==0&m==0)
            break;
        printf("%d\n",cl(n,m));
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值