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.pswp.cn/news/397467.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397467.shtml
英文地址,請注明出處:http://en.pswp.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;重新啟動計算機&…