Poor God Water【矩阵快速幂】

Poor God Water
时间限制: 1 Sec 内存限制: 128 MB
提交: 102 解决: 50
[提交] [状态] [命题人:admin]
题目描述
God Water likes to eat meat, fish and chocolate very much, but unfortunately, the doctor tells him that some sequence of eating will make them poisonous.
Every hour, God Water will eat one kind of food among meat, fish and chocolate. If there are 3 continuous hours when he eats only one kind of food, he will be unhappy. Besides, if there are 3 continuous hours when he eats all kinds of those, with chocolate at the middle hour, it will be dangerous. Moreover, if there are 3 continuous hours when he eats meat or fish at the middle hour, with chocolate at other two hours, it will also be dangerous.
Now, you are the doctor. Can you find out how many different kinds of diet that can make God Water happy and safe during N hours? Two kinds of diet are considered the same if they share the same kind of food at the same hour. The answer may be very large, so you only need to give out the answer module 1000000007.

输入
The fist line puts an integer T that shows the number of test cases. (T≤1000)
Each of the next T lines contains an integer N that shows the number of hours. (1≤N≤10^10)

输出
For each test case, output a single line containing the answer.

样例输入
复制样例数据
3
3
4
15
样例输出
20
46
435170

题目大意:
假设鱼为aaa,肉为bbb,巧克力为ccc,先输入一个数字TTT,表示共有TTT组测试数据,下面TTT行每行输入一个整数nnn,代表有nnn个时刻,每个时刻可以吃一种食物,但不能连续三个小时吃同一种食物,即aaaaaaaaabbbbbbbbbccccccccc不合法,当在三个小时内三种食物都吃的话,巧克力不能放中间,即acbacbacbbcabcabca不合法,还有就是caccaccacbcbbcbbcb,问共有多少种吃法。

解题思路:
n=1n=1n=1时,有f[1]=3f[1]=3f[1]=3种吃法,即a,b,ca,b,ca,b,c
n=2n=2n=2时,有f[2]=9f[2]=9f[2]=9种吃法,并假设
1、aa2、ba3、ca1、aa\ \ \ \ \ 2、ba\ \ \ \ \ 3、ca1aa     2ba     3ca
4、ab5、bb6、cb4、ab\ \ \ \ \ 5、bb\ \ \ \ \ 6、cb4ab     5bb     6cb
7、ac8、bc9、cc7、ac\ \ \ \ \ 8、bc\ \ \ \ \ 9、cc7ac     8bc     9cc
n=3n=3n=3时,有f[3]=20f[3]=20f[3]=20种吃法
1、aa{bc2、ba{abc3、ca{ab1、aa\begin{cases}b \\c \end{cases}\ \ \ \ \ 2、ba\begin{cases}a\\b \\c \end{cases}\ \ \ \ \ 3、ca\begin{cases}a \\b \end{cases}1aa{bc     2baabc     3ca{ab
4、ab{abc5、bb{ac6、cb{ab4、ab\begin{cases}a\\b \\c \end{cases}\ \ \ \ \ 5、bb\begin{cases}a \\c \end{cases}\ \ \ \ \ 6、cb\begin{cases}a \\b \end{cases}4ababc     5bb{ac     6cb{ab
7、ac{ac8、bc{bc9、cc{ab7、ac\begin{cases}a \\c \end{cases}\ \ \ \ \ 8、bc\begin{cases}b \\c \end{cases}\ \ \ \ \ 9、cc\begin{cases}a \\b \end{cases}7ac{ac     8bc{bc     9cc{ab
n>=3n>=3n>=3
其情况111的个数有:f[n−1].2+f[n−1].3f[n-1].2+f[n-1].3f[n1].2+f[n1].3
其情况222的个数有:f[n−1].4+f[n−1].5+f[n−1].6f[n-1].4+f[n-1].5+f[n-1].6f[n1].4+f[n1].5+f[n1].6
其情况333的个数有:f[n−1].7+f[n−1].9f[n-1].7+f[n-1].9f[n1].7+f[n1].9
其情况444的个数有:f[n−1].1+f[n−1].2+f[n−1].3f[n-1].1+f[n-1].2+f[n-1].3f[n1].1+f[n1].2+f[n1].3
其情况555的个数有:f[n−1].4+f[n−1].6f[n-1].4+f[n-1].6f[n1].4+f[n1].6
其情况666的个数有:f[n−1].8+f[n−1].9f[n-1].8+f[n-1].9f[n1].8+f[n1].9
其情况777的个数有:f[n−1].1+f[n−1].2f[n-1].1+f[n-1].2f[n1].1+f[n1].2
其情况888的个数有:f[n−1].4+f[n−1].5f[n-1].4+f[n-1].5f[n1].4+f[n1].5
其情况999的个数有:f[n−1].7+f[n−1].8f[n-1].7+f[n-1].8f[n1].7+f[n1].8
所以可得:
∣f[n].1f[n].2f[n].3f[n].4f[n].5f[n].6f[n].7f[n].8f[n].9000000000000000000000000000000000000000000000000000000000000000000000000∣=∣111111111000000000000000000000000000000000000000000000000000000000000000000000000∣×∣000100100100100100100100000010010010010000010010010000001000001000001001001001000∣n−2\begin{vmatrix} f[n].1 & f[n].2& f[n].3 & f[n].4 & f[n].5 & f[n].6 & f[n].7 & f[n].8 & f[n].9 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ \end{vmatrix}=\begin{vmatrix} 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ \end{vmatrix}\times\begin{vmatrix} 0 & 0 & 0 & 1 & 0 & 0 & 1 & 0 & 0 \\ 1 & 0 & 0 & 1 & 0 & 0 & 1 & 0 & 0 \\ 1 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 1 & 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 & 0 & 1 & 0 & 0 & 0 \\ \end{vmatrix}^{n-2}f[n].100000000f[n].200000000f[n].300000000f[n].400000000f[n].500000000f[n].600000000f[n].700000000f[n].800000000f[n].900000000=100000000100000000100000000100000000100000000100000000100000000100000000100000000×011000000000111000000000101111000000000101000000000011110000000000110000000000110n2
因此直接用矩阵快速幂计算即可

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <set>
#include <utility>
#include <sstream>
#include <iomanip>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define inf 0x3f3f3f3f
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define lep(i,l,r) for(int i=l;i>=r;i--)
#define ms(arr) memset(arr,0,sizeof(arr))
//priority_queue<int,vector<int> ,greater<int> >q;
const int maxn = (int)1e5 + 5;
const ll mod = 1e9+7;
struct node
{ll arr[9][9];node() {ms(arr);}
};
node mul(node a,node b) {node c;for(int i=0;i<9;i++) {for(int j=0;j<9;j++) {for(int k=0;k<9;k++) {c.arr[i][j]=(c.arr[i][j]+(a.arr[i][k]*b.arr[k][j])%mod+mod)%mod;}}}return c;
}
ll quickpow(ll n) {node base;base.arr[1][0]=1;base.arr[2][0]=1;base.arr[3][1]=1;base.arr[4][1]=1;base.arr[5][1]=1;base.arr[6][2]=1;base.arr[8][2]=1;base.arr[0][3]=1;base.arr[1][3]=1;base.arr[2][3]=1;base.arr[3][4]=1;base.arr[5][4]=1;base.arr[7][5]=1;base.arr[8][5]=1;base.arr[0][6]=1;base.arr[1][6]=1;base.arr[3][7]=1;base.arr[4][7]=1;base.arr[6][8]=1;base.arr[7][8]=1;node a;a.arr[0][0]=1;a.arr[0][1]=1;a.arr[0][2]=1;a.arr[0][3]=1;a.arr[0][4]=1;a.arr[0][5]=1;a.arr[0][6]=1;a.arr[0][7]=1;a.arr[0][8]=1;while(n) {if(n&1) a=mul(a,base);base=mul(base,base);n>>=1;}ll ans=0;for(int i=0;i<9;i++) {ans=(ans+a.arr[0][i])%mod;}return ans;
}
int main() 
{#ifndef ONLINE_JUDGE//freopen("in.txt", "r", stdin);#endif//freopen("out.txt", "w", stdout);//ios::sync_with_stdio(0),cin.tie(0);int T;scanf("%d",&T);while(T--) {ll n;scanf("%lld",&n);if(n==1) printf("3\n");else printf("%lld\n",quickpow(n-2));}return 0;
}

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

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

相关文章

Transport Ship【多重背包】

Transport Ship 时间限制: 1 Sec 内存限制: 128 MB 提交: 175 解决: 65 [提交] [状态] [命题人:admin] 题目描述 There are N different kinds of transport ships on the port. The i^th kind of ship can carry the weight of V[i] and the number of the ith kind of ship i…

洛谷P2015 二叉苹果树【树形dp】

P2015 二叉苹果树 时间限制 1.00s 内存限制 125.00MB 题目描述 有一棵苹果树&#xff0c;如果树枝有分叉&#xff0c;一定是分2叉&#xff08;就是说没有只有1个儿子的结点&#xff09; 这棵树共有N个结点&#xff08;叶子点或者树枝分叉点&#xff09;&#xff0c;编号为1-N,…

洛谷P2014【树形dp】

P2014 选课 时间限制 1.00s 内存限制 125.00MB 题目描述 在大学里每个学生&#xff0c;为了达到一定的学分&#xff0c;必须从很多课程里选择一些课程来学习&#xff0c;在课程里有些课程必须在某些课程之前学习&#xff0c;如高等数学总是在其它课程之前学习。现在有N门功课&…

洛谷P2016 战略游戏【树形dp】

P2016 战略游戏 时间限制 1.00s 内存限制 125.00MB 题目描述 Bob喜欢玩电脑游戏&#xff0c;特别是战略游戏。但是他经常无法找到快速玩过游戏的办法。现在他有个问题。 他要建立一个古城堡&#xff0c;城堡中的路形成一棵树。他要在这棵树的结点上放置最少数目的士兵&#x…

Shell Pyramid【数学+二分】

Shell Pyramid 时间限制: 1 Sec 内存限制: 128 MB 提交: 291 解决: 95 [提交] [状态] [命题人:admin] 题目描述 In the 17th century, with thunderous noise, dense smoke and blazing fire, battles on the sea were just the same as those in the modern times. But at tha…

Degree Sequence of Graph G【模拟】

Degree Sequence of Graph G 时间限制: 1 Sec 内存限制: 128 MB 提交: 362 解决: 92 [提交] [状态] [命题人:admin] 题目描述 Wang Haiyang is a strong and optimistic Chinese youngster. Although born and brought up in the northern inland city Harbin, he has deep lov…

Simple Addition expression【打表+二分】

Simple Addition expression 时间限制: 1 Sec 内存限制: 128 MB 提交: 355 解决: 80 [提交] [状态] [命题人:admin] 题目描述 A luxury yacht with 100 passengers on board is sailing on the sea in the twilight. The yacht is ablaze with lights and there comes out laug…

洛谷P2622 关灯问题II【状压dp+bfs】

P2622 关灯问题II 题目描述 现有n盏灯&#xff0c;以及m个按钮。每个按钮可以同时控制这n盏灯——按下了第i个按钮&#xff0c;对于所有的灯都有一个效果。按下i按钮对于第j盏灯&#xff0c;是下面3中效果之一&#xff1a;如果a[i][j]为1&#xff0c;那么当这盏灯开了的时候&am…

洛谷P1879 [USACO06NOV]玉米田Corn Fields【状压dp】

P1879 [USACO06NOV]玉米田Corn Fields 时间限制 1.00s 内存限制 125.00MB 题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ 12) square parcels. He wants to grow some yummy corn for the cows on a number…

LEAGUE TABLES【模拟】

LEAGUE TABLES 时间限制: 1 Sec 内存限制: 128 MB 提交: 349 解决: 150 [提交] [状态] [命题人:admin] 题目描述 League football (known in some circles as soccer) has been played in England since 1888 and is the most popular winter game through most of Europe, jus…

MUSICAL CHAIRS【模拟】

MUSICAL CHAIRS 时间限制: 1 Sec 内存限制: 128 MB 提交: 386 解决: 76 [提交] [状态] [命题人:admin] 题目描述 Musical chairs is a game frequently played at children’s parties. Players are seated in a circle facing outwards. When the music starts, the players h…

Bomb HDU - 3555【数位dp】

Bomb HDU - 3555 The counter-terrorists found a time bomb in the dust. But this time the terrorists improve on the time bomb. The number sequence of the time bomb counts from 1 to N. If the current number sequence includes the sub-sequence “49”, the power…

不要62 HDU - 2089【数位dp】

不要62 HDU - 2089 杭州人称那些傻乎乎粘嗒嗒的人为62&#xff08;音&#xff1a;laoer&#xff09;。 杭州交通管理局经常会扩充一些的士车牌照&#xff0c;新近出来一个好消息&#xff0c;以后上牌照&#xff0c;不再含有不吉利的数字了&#xff0c;这样一来&#xff0c;就可…

PACKING【二维01背包】

PACKING 时间限制: 1 Sec 内存限制: 128 MB 提交: 278 解决: 24 [提交] [状态] [命题人:admin] 题目描述 It was bound to happen. Modernisation has reached the North Pole. Faced with escalating costs for feeding Santa Claus and the reindeer, and serious difficulti…

机器人军团【动态规划】

机器人军团 时间限制: 1 Sec 内存限制: 64 MB 提交: 279 解决: 139 [提交] [状态] [命题人:admin] 题目描述 邪狼&#xff1a;“怎么感觉这些机器人比我还聪明&#xff1f;不是说人工智能永远不能超越人类吗&#xff1f;” 天顶星人&#xff1a;“你们真是目光短浅&#xff0c…

【动态规划】抄近路

【动态规划】抄近路 时间限制: 1 Sec 内存限制: 64 MB 提交: 105 解决: 68 [提交] [状态] [命题人:admin] 题目描述 “最近不知道怎么回事&#xff0c;感觉我们这个城市变成了一个神奇的地方&#xff0c;有时在路上走着走着人就消失了&#xff01;走着走着突然又有人出现了&…

【动态规划】魔法石矿

【动态规划】魔法石矿 时间限制: 1 Sec 内存限制: 64 MB 提交: 116 解决: 27 [提交] [状态] [命题人:admin] 题目描述 为了找到回家的路&#xff0c;张琪曼施展魔法&#xff0c;从高维空间召唤出了一种叫作“读者”的生物&#xff0c;据说“读者”这种生物无所不能&#xff0c;…

Knapsack Cryptosystem【折半+查找】

链接&#xff1a;https://ac.nowcoder.com/acm/contest/889/D 来源&#xff1a;牛客网 Amy asks Mr. B problem D. Please help Mr. B to solve the following problem. Amy wants to crack Merkle–Hellman knapsack cryptosystem. Please help it. Given an array {ai} wi…

All men are brothers【并查集+数学】

链接&#xff1a;https://ac.nowcoder.com/acm/contest/889/E 来源&#xff1a;牛客网 题目描述 Amy asks Mr. B problem E. Please help Mr. B to solve the following problem. There are n people, who don’t know each other at the beginning. There are m turns. In e…

Light bulbs【差分】

19.98% 1000ms 8192K There are NN light bulbs indexed from 00 to N-1N−1. Initially, all of them are off. A FLIP operation switches the state of a contiguous subset of bulbs. FLIP(L, R)FLIP(L,R)means to flip all bulbs xx such that L \leq x \leq RL≤x≤R. S…