题目描述
你有多少种方法用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;
}