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. keepalive 原理讲解

    keepalive 我们说到keepalive的时候,需要先明确一点,这个keepalive说的是tcp的还是http的. tcp的keepalive是侧重在保持客户端和服务端的连接,一方会不定期发送 ...

  2. Manacher算法学习笔记

    前言 Manacher(也叫马拉车)是一种用于在线性时间内找出字符串中最长回文子串的算法 算法 一般的查找回文串的算法是枚举中心,然后往两侧拓展,看最多拓展出多远.最坏情况下$O(n^2)$ 然而Ma ...

  3. hdoj1180 诡异的楼梯(bfs+奇偶判断)

    手癌!日常手癌!被自己气死! #include<iostream> #include<cstring> #include<queue> #include<al ...

  4. [兼容]——IE 8 常见兼容性问题

    接触了一个PC端网页开发的项目,要求兼容到IE 8,遇到不少坑,在这里记录下: 1.IE8 的兼容性视图 bug描述:IE8有许多新更新,但微软为了兼容以前的IE浏览器,提出了"兼容性视图& ...

  5. JAVA是是如何处理字符的。

    String s = "fs123fdsa";//String变量 byte b[] = s.getBytes();//String转换为byte[] String t = new ...

  6. yolov3源码分析keras(一)数据的处理

    一.前言 本次分析的源码为大佬复现的keras版本,上一波地址:https://github.com/qqwweee/keras-yolo3 初步打算重点分析两部分,第一部分为数据,即分析图像如何做等 ...

  7. ThreadLocal的实现机制

    TLS(Thread Local Storage)通过分配更多内存来解决多线程对临界资源访问的互斥问题,即每个线程均自己的临界资源对象, 这样也就不会发生访问冲突,也不需要锁机制控制,比较典型的以空间 ...

  8. Fiddler4抓包工具使用教程一

    本文参考自http://blog.csdn.net/ohmygirl/article/details/17846199,纯属读书笔记,加深记忆 1.抓包工具有很多,为什么要使用Fiddler呢?原因如 ...

  9. java c :foreach 标签怎么获取自增分页序号

    问题描述: 如果每页10条,下一页就从11递增,依次类推:用varStatus,下一页又从1开始了 解决方案: <c:forEach var="pag" begin=&quo ...

  10. Exceptionless搭配log4net记录日志

    接上篇: Exceptionless 本地部署 在部署完成后可以使用log4net搭配Exceptionless来记录日志. 过程很简单,使用Nuget安装Exceptionless.Log4net, ...