HDU-2604(递推+矩阵快速幂)

2024-03-02 10:58
文章标签 快速 矩阵 递推 hdu 2604

本文主要是介绍HDU-2604(递推+矩阵快速幂),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Queues and Priority Queues are data structures which are known to most computer scientists. The Queue occurs often in our daily life. There are many people lined up at the lunch time. 

  Now we define that ‘f’ is short for female and ‘m’ is short for male. If the queue’s length is L, then there are 2  L numbers of queues. For example, if L = 2, then they are ff, mm, fm, mf . If there exists a subqueue as fmf or fff, we call it O-queue else it is a E-queue. 
Your task is to calculate the number of E-queues mod M with length L by writing a program. 
Input
Input a length L (0 <= L <= 10  6) and M.
Output
Output K mod M(1 <= M <= 30) where K is the number of E-queues with length L.
Sample Input
3 8
4 7
4 8
Sample Output
6
2
1
/*
题意:
输入一个L和M表示有2^L个人在排队,
队列有male和famale分别用f和m替换
当队列出现fff或fmf此时这个队列就是一个O-queue
其他情况就是E-queue,列如当L=2时,有4种排列,
分别为ff,fm,mf,mm不存在O-queue,所以
E-queue的数量就是4种,你的任务是求:
E-queue的数量%M题解:递推+矩阵快速幂
根据题目的意思,我们可以求出F[0] = 0 , F[1] = 2 , F[2] = 4 , F[3] = 6 , F[4] = 9 , F[5] = 152 那么根据上面前5项我们可以求出n >= 5的时候 F[n] = F[n-1]+F[n-3]+F[n-4]那么我们就可以构造出矩阵| 1 0 1 1 |     | F[n-1] |    | F[n]   || 1 0 0 0 |  *  | F[n-2] | =  | F[n-1] || 0 1 0 0 |     | F[n-3] |    | F[n-2] || 0 0 1 0 |     | F[n-4] |    | F[n-3] |*/
#include <stdio.h>
#include <string.h>
#include<iostream>
#include <algorithm>
#include<math.h>
#include<map>
using namespace std;struct node
{long long int maxtri[6][6];
};
node res, roi;
int l, kk;node operator * (node &a, node &b)
{node ans;memset(ans.maxtri, 0, sizeof(ans.maxtri));for (int k = 0; k < 4; k++){for (int i = 0; i < 4; i++){for (int j = 0; j < 4; j++){ans.maxtri[i][j] += a.maxtri[i][k] * (b.maxtri[k][j] % kk) % kk;}}}return ans;
}void quickmuti(int nn)
{node temp;for (int i = 0; i < 4; i++){for (int j = 0; j < 4; j++){temp.maxtri[i][j] = (i == j);}}while (nn){if (nn & 1){temp = temp*roi;}nn >>= 1;roi = roi*roi;}res = res*temp;
}void init()
{memset(roi.maxtri, 0, sizeof(roi.maxtri));memset(res.maxtri, 0, sizeof(res.maxtri));roi.maxtri[0][0] = roi.maxtri[0][1]= roi.maxtri[1][2] = roi.maxtri[2][0]= roi.maxtri[2][3] = roi.maxtri[3][0]= 1;res.maxtri[0][0] = 9;res.maxtri[0][1] = 6;res.maxtri[0][2] = 4;res.maxtri[0][3] = 2;
}int main()
{while (cin >> l >> kk){init();if (l == 0){cout << '0' << endl;continue;}else if (l <= 4){cout << res.maxtri[0][(4 - l)] % kk << endl;continue;}quickmuti(l - 4);cout << res.maxtri[0][0] % kk << endl;}return 0;
}




这篇关于HDU-2604(递推+矩阵快速幂)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python实现快速扫描目标主机的开放端口和服务

《Python实现快速扫描目标主机的开放端口和服务》这篇文章主要为大家详细介绍了如何使用Python编写一个功能强大的端口扫描器脚本,实现快速扫描目标主机的开放端口和服务,感兴趣的小伙伴可以了解下... 目录功能介绍场景应用1. 网络安全审计2. 系统管理维护3. 网络故障排查4. 合规性检查报错处理1.

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

SpringCloud Stream 快速入门实例教程

《SpringCloudStream快速入门实例教程》本文介绍了SpringCloudStream(SCS)组件在分布式系统中的作用,以及如何集成到SpringBoot项目中,通过SCS,可... 目录1.SCS 组件的出现的背景和作用2.SCS 集成srping Boot项目3.Yml 配置4.Sprin

SpringBoot集成iText快速生成PDF教程

《SpringBoot集成iText快速生成PDF教程》本文介绍了如何在SpringBoot项目中集成iText9.4.0生成PDF文档,包括新特性的介绍、环境准备、Service层实现、Contro... 目录SpringBoot集成iText 9.4.0生成PDF一、iText 9新特性与架构变革二、环

MySQL 批量插入的原理和实战方法(快速提升大数据导入效率)

《MySQL批量插入的原理和实战方法(快速提升大数据导入效率)》在日常开发中,我们经常需要将大量数据批量插入到MySQL数据库中,本文将介绍批量插入的原理、实现方法,并结合Python和PyMySQ... 目录一、批量插入的优势二、mysql 表的创建示例三、python 实现批量插入1. 安装 PyMyS

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Mybatis-Plus 3.5.12 分页拦截器消失的问题及快速解决方法

《Mybatis-Plus3.5.12分页拦截器消失的问题及快速解决方法》作为Java开发者,我们都爱用Mybatis-Plus简化CRUD操作,尤其是它的分页功能,几行代码就能搞定复杂的分页查询... 目录一、问题场景:分页拦截器突然 “失踪”二、问题根源:依赖拆分惹的祸三、解决办法:添加扩展依赖四、分页

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c