Hard Wuxing

Accepted : 13   Submit : 166
Time Limit : 1000 MS   Memory Limit : 65536 KB

题目描述

“五行”是中国传统哲学思想,它认为认为大自然的现象由“木、火、土、金、水”这五种气的变化所总括, 不但影响到人的命运,同时也使宇宙万物循环不已。 五行具有相生相克的性质,规律如下:

  • 五行相克:金克木,木克土,土克水,水克火,火克金。
  • 五行相生:金生水,水生木,木生火,火生土,土生金。
  • 五行任一行与其他五行的关系为:同我、生我、我生、克我、我克。


给你一个1*n的格子,将五行填上去,每格填一个,要求相邻格以及首尾格不能是同我和相克的关系, 请问一共有多少种不同的方案?

输入

多组样例,每组一个整数n(0≤n≤1018),如果n为0,表示输入结束,这个样例不需要处理。

输出

每行输出一个样例的结果,因为数值可能非常大,请将结果对109+7取模。

样例输入

1
2
0

样例输出

5
10

Source

XTU OnlineJudge

 
优化矩阵的同构
偶然一次看到标程,发现它的代码少得惊人,我的代码写得不是一般搓了。而且好像它没有优化同构过的。
代码书写真的需要下工夫。
 #include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
#include<queue>
using namespace std;
typedef __int64 LL;
const LL mod = ; struct Matrix
{
LL mat[][];
void Init()
{
LL cur;
int i,j;
mat[][]=;mat[][]=;mat[][]=;mat[][]=;mat[][]=;
for(i=;i<=;i++)
{
for(j=;j<=;j++)
{
if(j==) cur=;
else cur=j-;
mat[i][j]=mat[i-][cur];
}
}
}
}M_hxl;
void Matrix_ini(Matrix *cur,LL n)
{
int i,j;
for(i=;i<=n;i++)
for(j=;j<=n;j++)
if(i==j)
cur->mat[i][j]=;
else cur->mat[i][j]=;
} Matrix Multiply(Matrix cur,Matrix now,LL len)
{
Matrix ww;
int i,j,k,tmp;
memset(ww.mat,,sizeof(ww.mat));
i=;
for(k=;k<=len;k++)
if(cur.mat[i][k])
{
for(j=;j<=len;j++)
if(now.mat[k][j])
{
ww.mat[i][j]+=cur.mat[i][k]*now.mat[k][j];
if(ww.mat[i][j]>=mod)
ww.mat[i][j]%=mod;
}
}
for(i=;i<=;i++)
{
for(j=;j<=;j++)
{
if(j==) tmp=;
else tmp=j-;
ww.mat[i][j]=ww.mat[i-][tmp];
}
}
return ww;
}
struct Matrix M_add(Matrix cur,Matrix now,LL len)
{
Matrix ww;
int i,j;
memset(ww.mat,,sizeof(ww.mat)); for(i=;i<=len;i++)
for(j=;j<=len;j++)
{
ww.mat[i][j]=cur.mat[i][j]+now.mat[i][j];
if(ww.mat[i][j]>=mod)
ww.mat[i][j]%=mod;
}
return ww;
}
Matrix pow_sum1(Matrix cur,LL n,LL len)
{
Matrix ww;
Matrix_ini(&ww,len);
while(n)
{
if(n&)
{
ww=Multiply(ww,cur,len);
}
n=n>>;
cur=Multiply(cur,cur,len);
}
return ww;
}
void solve(LL n)
{
LL k=;
M_hxl.Init();
M_hxl=pow_sum1(M_hxl,n,);
k=(M_hxl.mat[][]+M_hxl.mat[][])%mod;
k=(k*)%mod;
printf("%I64d\n",k);
}
int main()
{
LL n;
while(scanf("%I64d",&n)>)
{
if(n==)break;
if(n==)
{
printf("5\n");
continue;
}
solve(n-);
}
return ;
}
 

湘潭校赛 Hard Wuxing的更多相关文章

  1. 湘潭校赛 Easy Wuxing

    Easy Wuxing Accepted : 25   Submit : 124 Time Limit : 1000 MS   Memory Limit : 65536 KB 题目描述 “五行”是中国 ...

  2. 湘潭校赛 Bob's Problem

    Bob's Problem Accepted : 18   Submit : 115 Time Limit : 1000 MS   Memory Limit : 65536 KB  题目描述 Bob今 ...

  3. 2019湘潭校赛 G(并查集)

    要点 题目传送 题目本质是每个点必属于两个集合中的一个,伴随的性质是:如果一个人说别人true,则他们一定属于同一阵营:如果说别人fake,一定不属于同一阵营. 每个点拆为\(i\)和\(i + n\ ...

  4. 2019湘潭校赛 H(dp)

    题目传送 dp是常规的:\(m^2\)的预处理:把位置存进vector然后\(O(1)\)算出想要的:WA点:要注意特意设置一下val[i][v.size()]=0,即全天都放鸽子则花费时间为0. # ...

  5. 2019湘潭校赛 E(答案区间维护)

    题目传送 思路是始终维护西瓜数量的区间,即L代表目前可以达到的最少的,R是最多的,然后判断一下. #include <bits/stdc++.h> using namespace std; ...

  6. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  7. SCNU省选校赛第二场B题题解

    今晚的校赛又告一段落啦,终于"开斋"了! AC了两题,还算是满意的,英语还是硬伤. 来看题目吧! B. Array time limit per test 2 seconds me ...

  8. 2014上半年acm总结(1)(入门+校赛)

    大一下学期才开始了acm,不得不说有一点迟,但是acm确实使我的生活充实了很多,,不至于像以前一样经常没事干=  = 上学期的颓废使我的c语言学的渣的一笔..靠考前突击才基本掌握了语法 寒假突然醒悟, ...

  9. 2017CUIT校赛-线上赛

    2017Pwnhub杯-CUIT校赛 这是CUIT第十三届校赛啦,也是我参加的第一次校赛. 在被虐到崩溃的过程中也学到了一些东西. 这次比赛是从5.27早上十点打到5.28晚上十点,共36小时,中间睡 ...

随机推荐

  1. C#使用PriorityQueue

    #pragma once #include<cliext/queue> #include<cliext/vector> using namespace cliext; usin ...

  2. LiLicense server OR Activation code

    JET BRAINS系列工具下载地址: https://www.jetbrains.com/products.html?fromMenu License server 输入下列两个任何一个点击 Act ...

  3. jzoj5945

    這題是均分紙牌求方案數 我們可以分2種情況討論: 1.當前面部分的平均值>=現在我們要的值 那麼我們可以把所有牌都放到第i個點,現在若有k張牌,則要把k−i∗avek-i*avek−i∗ave張 ...

  4. 详解PhpSpreadsheet设置单元格

    PhpSpreadsheet提供了丰富的API接口,可以设置诸多单元格以及文档属性,包括样式.图片.日期.函数等等诸多应用,总之你想要什么样的Excel表格,PhpSpreadsheet都能做到. 在 ...

  5. Python小白学习之路(五)—【类和对象】【列表】【列表相关功能】

    类和对象 (简单的了解一下这个概念,初步有个印象,这个概念很重要,后面会着重讲) 类:具有相同属性和方法的对象的集合: 对象:万物皆对象: 概念很抽象(每当我看不到概念的时候,我就会通过举例来理解) ...

  6. 剑指offer二十五之复杂链表的复制

    一.题目 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否 ...

  7. centos 6.8 解决ibus输入法不正常显示的问题

    今天发现 ibus输入法打字时不正常显示,如下图

  8. Builder生成器(创建型模式)

    一.使用场景: 1.假设要创建一个House设施,该设施的创建由若干个部分组成,而且这若干个部分经常变化. 如果用最直观的设计方式,每一个房屋部分的变化,都将导致整个房屋结构的重新修正,但是这种设计方 ...

  9. Failed to instantiate [java.util.List]: Specified class is an interface

    错误信息提示: Failed to instantiate [java.util.List]: Specified class is an interface; 错误信息意思:参数错误,参数封装出了问 ...

  10. Redis-cli命令总结

    连接操作相关的命令 默认直接连接  远程连接-h 192.168.1.20 -p 6379 ping:测试连接是否存活如果正常会返回pong echo:打印 select:切换到指定的数据库,数据库索 ...