HDU 2842 Chinese Rings(矩阵高速功率+递归)

职务地址:HDU 2842

这个游戏是一个九连环的游戏。

如果当前要卸下前n个环。由于要满足前n-2个都卸下,所以要先把前n-2个卸下。须要f(n-2)次。然后把第n个卸下须要1次,然后这时候要卸下第n-1个。然后此时前n-2个都已经被卸下了。这时候把前n-2个都卸下与都装上所需的次数是一样的。由于卸下与装上的规则是一样的。

所以又须要f(n-2)次。这时候前n-1个都在上面,卸下前n-1个须要f(n-1)次。

所以。总共须要2*f(n-2)+f(n-1)+1次。

然后构造例如以下矩阵。

1,2,1

1,0,0

0,0,1

*

f(n-1)

f(n-2)

1

=

f(n)

f(n-1)

1;

然后用矩阵高速幂求解。

代码例如以下:

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <queue>
#include <map>
#include <set>
#include <algorithm>using namespace std;
#define LL __int64
const int mod=200907;
struct matrix
{LL ma[4][4];
}init, res;
matrix Mult(matrix x, matrix y)
{matrix tmp;int i, j, k;for(i=0;i<3;i++){for(j=0;j<3;j++){tmp.ma[i][j]=0;for(k=0;k<3;k++){tmp.ma[i][j]=(tmp.ma[i][j]+x.ma[i][k]*y.ma[k][j])%mod;}}}return tmp;
}
matrix Pow(matrix x, int k)
{matrix tmp;int i, j;for(i=0;i<3;i++) for(j=0;j<3;j++) tmp.ma[i][j]=(i==j);while(k){if(k&1) tmp=Mult(tmp,x);x=Mult(x,x);k>>=1;}return tmp;
}
int main()
{int k, i, j;while(scanf("%d",&k)!=EOF&&k){if(k==1){printf("1\n");continue ;}init.ma[0][0]=1;init.ma[0][1]=2;init.ma[0][2]=1;init.ma[1][0]=1;init.ma[1][1]=0;init.ma[1][2]=0;init.ma[2][0]=0;init.ma[2][1]=0;init.ma[2][2]=1;res=Pow(init,k-2);LL ans;ans=(2*res.ma[0][0]+res.ma[0][1]+res.ma[0][2])%mod;printf("%I64d\n",ans);}return 0;
}


版权声明:本文博主原创文章,博客,未经同意不得转载。

转载于:https://www.cnblogs.com/gcczhongduan/p/4840616.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397467.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

硬链接与软连接

linux系统硬链接和软连接&#xff1a; 1文件都由文件名和数据组成&#xff0c;在linux中文件被分为两个部分&#xff1a;用户数据和元数据。用户数据&#xff1a;即文件数据块&#xff0c;记录真实数据的地方。元数据&#xff1a;文件的附加属性&#xff0c;记录文件的大小&…

linux 7.2中文命令,CentOS7如何支持中文显示

1.查看系统是否安装有中文语言包locale -a | grep "zh_CN" 命令含义&#xff1a;列出所有可用的公共语言环境的名称&#xff0c;包含有"zh_CN"若出现图中所示几项&#xff0c;那么说明系统中已经安装了语言包&#xff0c;不需要在安装。含义是&#xff1a;…

html-拖拽

html-拖拽(draggable"true")拖拽的7个事件&#xff1a;> 拖拽块.οndragstartfunction(){console.log("拖拽开始")&#xff1b;}> 拖拽块.οndragfunction(){console.log("拖拽中")&#xff1b;}> 拖拽块.οndragendfunction(){console…

大道至简

道在中国哲学中&#xff0c;是一个重要的概念&#xff0c;表示“终极真理”。此一概念&#xff0c;不单为哲学流派诸子百家所重视&#xff0c;也被宗教流派道教等所使用。大道至简是指大道理&#xff08;基本原理、方法和规律&#xff09;是极其简单的&#xff0c;简单到一两句…

别人7天乐,运维还苦逼值班?

你被点名值班了吗&#xff1f;或者你的朋友、隔壁七大姑八大姨的侄子被点名值班了吗&#xff1f; 国庆将至&#xff0c;大家都开始研究各种度假攻略了&#xff0c;国内游、国外游、地球游、外星游。。。然而总有一票人&#xff0c;默默地职守着 -- tIT 公司运营支撑组/运维组。…

【常用损失函数】

一、Smooth L1 Loss 1.公式&#xff1a; 2.原因&#xff1a; L1损失使权值稀疏但是导数不连续&#xff0c;L2损失导数连续可以防止过拟合但对噪声不够鲁棒&#xff0c;分段结合两者优势。 二、Focal Loss 1.公式&#xff1a; 2.作用&#xff1a; 使得正负样本平衡的同时&#x…

ORA-01940: cannot drop a user that is currently connected解决方法

我们在删除数据库用户时候会碰到如下错误 SQL> DROP USER sys_xj cascade; DROP USER sys_xj cascade*ERROR at line 1:ORA-01940: cannot drop a user that is currently connected 解决方法&#xff1a; 1.查询出还在连接的此用户会话进程 SQL> SELECT SID,SERIAL# FR…

实现对象克隆

实现Serializable接口&#xff0c;通过对象的序列化和反序列化实现克隆&#xff0c;可以实现真正的深度克隆&#xff0c;代码如下 package com.lovo; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; i…

linux 读取内存颗粒,linux查看主板内存槽与内存信息的命令dmidecode怎么用

在Linux中&#xff0c;我们常常使用命令来实现许多操作&#xff0c;比如查看内存信息等&#xff0c;下面小编就为大家带来一篇linux查看主板内存槽与内存信息的命令dmidecode方法。小编觉得挺不错的&#xff0c;现在就分享给大家&#xff0c;也给大家做个参考。一起跟随小编过来…

python 图像处理(从安装Pillow开始)

python 图像处理(从安装Pillow开始) python2.x及以下用的是PIL(图像处理库是 PIL(Python Image Library))&#xff0c;最新版本是 1.1.7 可在http://www.pythonware.com/products/pil/index.htm 下载和学习。 不过从该网站可看出它不支持python3.x Pillow由PIL而来(支持3.x)&…

手机还是不要随便更新的好

新入mate9pro 不到一个月&#xff0c;手贱升级了系统版本&#xff0c;出现导航搜索不到卫星的情况&#xff0c;软件下载了高德地图、腾讯地图、百度地图&#xff0c;逐一卸载安装重试&#xff0c;没一个能成功的&#xff0c;后来又下载了专业搜星软件&#xff0c;还是搜不到卫星…

Java对象容器——List

为什么80%的码农都做不了架构师&#xff1f;>>> 在Java中&#xff0c;我们可以用数组来存放同类型的变量或对象&#xff0c;但是数组有一个缺陷&#xff0c;它的长度不可变&#xff0c;必须在定义时给定其长度&#xff0c;所以说在一些场合下不适用。例如我们要存放…

STL学习笔记(数值算法)

运用数值算法之前必须先加入头文件<numeric> 加工运算后产生结果 1.对序列进行某种运算 T accumulate(InputIterator beg,InputIterator end, T initValue) T accumulate(InputIterator beg,InputIterator end, T initValue,BinaryFunc op) 1.第一种形式计算InitValue和…

angualejs

为什么80%的码农都做不了架构师&#xff1f;>>> http://segmentfault.com/a/1190000000347412 http://www.xker.com/page/e2015/06/199141.html http://www.runoob.com/angularjs/angularjs-application.html http://blog.csdn.net/lglgsy456/article/details/3690…

linux函数地址获取函数名,函数名/函数地址/函数指针

函数指针&#xff1a;1。指针变量 2。指针变量指向函数这正如用指针变量可指向整型变量、字符型、数组一样。在编译时&#xff0c;每一个函数都有一个入口地址&#xff0c;该入口地址就是函数指针所指向的地址。可利用该指针变量调用函数&#xff0c;就如同用指针变量可引用其他…

SPOJ SORTBIT Sorted bit squence (数位DP,入门)

题意&#xff1a; 给出一个范围[m,n]&#xff0c;按照二进制表示中的1的个数从小到大排序&#xff0c;若1的个数相同&#xff0c;则按照十进制大小排序。求排序后的第k个数。注意&#xff1a;m*n>0。 思路&#xff1a; 也是看论文的。一开始也能想到是这种解法&#xff0c;枚…

老web换新枝----Sails.js移动设备的全新生产力(五)

自定义模型操作目前为止&#xff0c;我们的进展非常顺利&#xff0c;我们使用了 Sails 的默认路由来访问或修改模型实例。这些默认设置&#xff08;包含在 Sails Blueprint API 中&#xff09;负责我们期望从 Web 或移动应用程序获得的基本的创建&#xff08;create&#xff09…

linux 驱动没有设备id,linux不同总线的设备和驱动的匹配过程分析

摘自&#xff1a;前几日读书会&#xff0c;谈到linux中driver和device的匹配问题&#xff0c;我认为是通过设备名来匹配的&#xff0c;因为我之前看过platform的驱动&#xff0c;它就是通过设备name和驱动name来进行匹配&#xff0c;所以我确信linux里边所有的驱动和设备都是这…

理解Flight框架核心

看到了这篇分析flight的文章还不错&#xff0c;就转过来了&#xff0c;地址&#xff1a;https://blog.csdn.net/sky_zhe/article/details/38906689 Flight框架&#xff08;官网&#xff09;是一个微型的PHP框架&#xff0c;它简单&#xff0c;快速&#xff0c;可扩展。借助Flig…

安装ISO系统(原版系统)系统终极方法

首先进入PE&#xff0c;在PE下找到你的系统ISO镜像&#xff0c;解压缩&#xff0c;然后将镜像里的boot文件夹、sources文件夹和bootmgr文件提取出来&#xff0c;然后复制到你要安装的分区&#xff08;比如c盘&#xff09;&#xff0c;接下来拔下U盘&#xff0c;重新启动计算机&…