Quad Tiling

2024-05-30 19:58
文章标签 tiling quad

本文主要是介绍Quad Tiling,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Description

Tired of the Tri Tiling game finally, Michael turns to a more challengeable game, Quad Tiling:

In how many ways can you tile a 4 × N (1 ≤ N ≤ 109) rectangle with 2 × 1 dominoes? For the answer would be very big,

output the answer modulo M (0 < M ≤ 105).

Input

Input consists of several test cases followed by a line containing double 0. Each test case consists of two integers, N and M,

respectively.

Output

For each test case, output the answer modules M.

Sample Input

1 10000
3 10000
5 10000
0 0

Sample Output

1
11
95
/*
解题报告:1.题意:求在一个4*N(N<=1000000000)的格子中放1*2的格子的方案数。
        2.可以推出公式:F(n)=F(n-1)+5*F(n-2)+F(n-3)-F(n-4).像处理斐波
          那契数列一样,利用矩阵进行优化。
         F(1) = 1, F(2) = 5, F(3) = 11, F(4) = 36.
        |F(n)  |   |1 5 1 -1| |F(n-1)||F(n-1)| = |0 1 0  0|*|F(n-2)||F(n-2)|   |0 0 1  0| |F(n-3)||F(n-3)|   |0 0 0  1| |F(n-4)||F(n-3)|   |0 0 0  1| |F(n-4)|-> |F(n-2)| = |0 0 1  0|*|F(n-3)||F(n-1)|   |0 1 0  0| |F(n-2)||F(n)  |   |1 5 1 -1| |F(n-1)|
*/
//标程:
 
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n, m;
const int c = 4;
int  N, Mod;
struct Matrix
{int n, m;int a[c][c];Matrix()  { }Matrix(int nn,int mm) : n(nn), m(mm) {};void clear(){n = m = 0;memset(a,0,sizeof(a));}Matrix operator + (const Matrix &b) const {Matrix temp = Matrix(n,m);temp.n = n,  temp.m = m;for(int i = 0; i < n; ++ i)for(int j = 0; j < m; ++ j)temp.a[i][j] = a[i][j] + b.a[i][j];return temp;}Matrix operator - (const Matrix &b) const {Matrix temp = Matrix(n,m);temp.n = n,  temp.m = m;for(int i = 0; i < n; ++ i)for(int j = 0; j < m; ++ j)temp.a[i][j] = a[i][j] - b.a[i][j];return temp;}Matrix operator * (const Matrix &b) const {Matrix temp = Matrix(n,m);temp.clear();temp.n = n,  temp.m = m;for(int i = 0; i < n; ++ i)for(int j = 0; j < b.m; ++ j)for(int k = 0; k < m; ++ k){temp.a[i][j] += a[i][k] * b.a[k][j];temp.a[i][j] %= Mod;}return temp;}
}f, d;
Matrix operator ^ (Matrix a,int p) 
{Matrix ret = Matrix(a.n,a.m);for(int i = 0; i < a.n; i ++)for(int j = 0; j < a.m; j ++)ret.a[i][j] = (i == j ? 1 : 0);while(p){if(p % 2) ret = ret * a;a = a * a;p /= 2;}return ret;
}
int main()
{
// 	freopen("a.txt","r",stdin);while(scanf("%d%d",&N,&Mod), n + Mod){ d = Matrix(4,4);d.a[0][0] = 1, d.a[1][0] = 5;d.a[2][0] = 11, d.a[3][0] = 36;f = Matrix(4,4);f.a[0][0]=0,  f.a[0][1]=1,  f.a[0][2]=0,  f.a[0][3]=0;f.a[1][0]=0,  f.a[1][1]=0,  f.a[1][2]=1,  f.a[1][3]=0;f.a[2][0]=0,  f.a[2][1]=0,  f.a[2][2]=0,  f.a[2][3]=1;f.a[3][0]=-1, f.a[3][1]=1,  f.a[3][2]=5,  f.a[3][3]=1;f = f ^ (N-1);f = f * d;printf("%d\n",f.a[0][0]);}return 0;
}

这篇关于Quad Tiling的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1016787

相关文章

OrangePi AIpro 香橙派 昇腾 Ascend C 算子开发 与 调用 - Tiling实现 2

OrangePi AIpro 香橙派 昇腾 Ascend C 算子开发 与 调用 - Tiling实现 2 flyfish 前置知识 1 前置知识 2 Host侧CPU和Device侧NPU的主要区别 不同的硬件资源 CPU是为了执行通用计算任务而设计的,但在处理大量的并行计算(如矩阵乘、批数据处理)时效率不高。NPU是为了加速机器学习和深度学习任务而设计的,它擅长执行大量的并行计算。N

OrangePi AIpro 香橙派 昇腾 Ascend C 算子开发 与 调用 - Tiling实现

OrangePi AIpro 香橙派 昇腾 Ascend C 算子开发 与 调用 - Tiling实现 flyfish 前置知识 基于Kernel直调工程的算子开发流程图 其中有一个Tiling实现 什么是Tiling、Tiling实现 计算API,包括标量计算API、向量计算API、矩阵计算API,分别实现调用Scalar计算单元、Vector计算单元、Cube计算单元执行计算的功

科研绘图系列:R语言差异基因四分图(Quad plot)

介绍 四分图(Quad plot)是一种数据可视化技术,通常用于展示四个变量之间的关系。它由四个子图组成,每个子图都显示两个变量之间的关系。四分图的布局通常是2x2的网格,每个格子代表一个变量对的散点图。 在四分图中,通常: 第一个子图显示变量A和B的关系。第二个子图显示变量A和C的关系。第三个子图显示变量A和D的关系。第四个子图显示变量B和C的关系。 此外,第四个子图也可以显示变量

【数学 递推】 HDU 1143 Tri Tiling

链接:Lux 参考:HERE n为奇数肯定为0,n为偶数,每次都是加两列,我们把两列看为一列,如果这一列与前面分开就只有三种方法即3*a[n-2],如果这一列不与前面的分开,那么不可分解矩形都只有两种情况所以为2*(a[n-4]+a[n-6]+……a[0]) 化简即为a[n]=4*a[n-2]-a[n-4] 化简,我不会,就写了个原始的,也算是过了。。。 #i

科研绘图系列:R语言单细胞差异基因四分图(Quad plot)

介绍 在单细胞分析领域,为了探究不同分组间同一细胞类型的基因表达差异,研究者们常采用四分图(Quad Plot)作为分析工具。该图形的横轴代表比较组1,而纵轴代表比较组2。通过这种布局,四分图能够有效地展示两组间共有的差异表达基因,从而为深入理解细胞类型在不同条件下的分子特性提供直观的视角。这种可视化方法不仅揭示了组间基因表达的异同,还有助于识别可能在生物学过程或疾病发生中起关键作用的基因。

hdu-1143-Tri Tiling

#include<iostream> using namespace std; int a[32]={0}; int main() {     int n,i;     a[0]=1;     a[2]=3;     for(i=4;i<32;i++)         a[i]=4*a[i-2]-a[i-4];     while(cin>>n&&n!=-1

AXI Quad SPI IP核中的STARTUPEn原语参数

启动STARTUPEn Primitive (原语)参数在 FPGA的主 SPI模式下非常有用。当你启用这个参数时,对于 7 系列设备,STARTUPE2 原语会被包含在设计中;而对于 UltraScale™ 设备,则是 STARTUPE3 原语。这些原语在 FPGA 配置后成为IP核的一部分。 1 启用STARTUPEn 原语参数 STARTUPEn(如STARTUPE2或STARTUP

AXI Quad SPI IP核AXI4-Lite接口的部分操作指南

1 AXI4-Lite接口标准SPI模式——传统模式下可选FIFO的使用 当AXI Quad SPI IP核配置为标准SPI模式时,可以选择在设计中包含16或256深度的可选FIFOs。由于AXI Quad SPI是全双工的,所以发送和接收FIFOs都作为一对被实例化,并且可以包含在IP核中。 当实现FIFO时,要求所有的从选择地址都相同缓冲在FIFO中的数据。这是必要的,因为从机选择地址没有

AXI Quad SPI IP核子模块

当选择Enable Performance Mode选项时,AXI Quad SPI IP核向后兼容所有早期版本的AXI Quad SPI IP核。该IP核包括以下子模块: AXI4-Lite 接口模块 AXI4-Lite接口模块为AXI4-Lite协议和IPIC提供接口。AXI4Lite接口上的读写事务被转换为等效的IP 互连(IPIC)事务。这是该IP核的默认组合。 SPI 寄存器模块

AXI Quad SPI IP核AXI4接口下的三种操作模式

当选择Enable Performance Mode选项时,AXI4接口包括在内。在该模式下,IP核可以在增强模式下操作(未选择启用XIP模式)或XIP模式(选择启用XIP模式)。在性能模式下,AXI4接口用于在DTR和DRR位置的突发事务。 1 增强模式 在这种模式下,原先用于IP核的AXI4-Lite接口被AXI4接口所取代。AXI4接口支持更复杂的数据传输方式,包括突发传输。根据“Mod