【BZOJ5082】弗拉格 矩阵乘法
【BZOJ5082】弗拉格
Description
Input
Output
Sample Input
Sample Output
题解:题中所给的条件不难令人想到矩乘。用v[a][b]表示最后一个颜色是a,倒数第二个颜色是b的方案数,然后根据前3个要求手动构建转移矩阵即可。
那第4个要求怎么办呢?我们直接将总方案数/2,但是一个回文串翻转过来和自身相等,不应该/2,所以我们还需加上回文串的个数。并且长度为偶数的回文串显然不满足条件1,所以我们只需要统计出所有长度为奇数的回文串,其数量=所有长度为(n+1)/2的串的个数。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
const ll P=1000000007;
struct M
{
ll v[17][17];
M() {memset(v,0,sizeof(v));}
ll* operator [] (int a) {return v[a];}
M operator * (const M &b) const
{
M c;
int i,j,k;
for(i=0;i<=16;i++) for(j=0;j<=16;j++) for(k=0;k<=16;k++) c.v[i][j]=(c.v[i][j]+v[i][k]*b.v[k][j])%P;
return c;
}
}S1,S2,T;
void pm(ll y1,ll y2)
{
while(y1||y2)
{
if(y1&1) S1=S1*T;
if(y2&1) S2=S2*T;
T=T*T,y1>>=1,y2>>=1;
}
}
//0白1红2黑3黄 inline ll calc(ll n)
{
if(!n) return 0;
if(n==1) return 4;
if(n==2) return 8;
int i,j,k;
T=S1=S2=M();
for(i=0;i<4;i++) for(j=0;j<4;j++) if(i!=j&&i+j!=3)
{
for(k=0;k<4;k++) if(j!=k&&j+k!=3&&!(i==2&&j==0&&k==1)&&!(i==1&&j==0&&k==2))
T[i*4+j][j*4+k]=1,T[i*4+j][16]++;
S1[0][i*4+j]=S2[0][i*4+j]=1;
}
T[16][16]=1;
S1[0][16]=S2[0][16]=8;
pm(n-2,(n+1)/2-2);
return ((S1[0][16]+S2[0][16]+P)%P*500000004+4)%P;
}
int main()
{
ll l,r;
scanf("%lld%lld",&l,&r);
printf("%lld",(calc(r)-calc(l-1)+P)%P);
return 0;
}
【BZOJ5082】弗拉格 矩阵乘法的更多相关文章
- BZOJ 5082: 弗拉格 矩阵乘法
如果单点而不是求 sigma 的话还是比较好办的. 遇到这种前缀和相减的矩阵乘法可以增设一个 0 使得后面的能先加到前面,然后再算. 这样的话可以使的最后算出的是前缀和相加的形式. code: #in ...
- *HDU2254 矩阵乘法
奥运 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...
- *HDU 1757 矩阵乘法
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- CH Round #30 摆花[矩阵乘法]
摆花 CH Round #30 - 清明欢乐赛 背景及描述 艺术馆门前将摆出许多花,一共有n个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ...
- POJ3070 Fibonacci[矩阵乘法]
Fibonacci Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13677 Accepted: 9697 Descri ...
- bzoj 2738 矩阵乘法
其实这题跟矩阵乘法没有任何卵关系,直接整体二分,用二维树状数组维护(刚刚学会>_<),复杂度好像有点爆炸(好像有十几亿不知道是不是算错了),但我们不能怂啊23333. #include&l ...
- 【BZOJ-2476】战场的数目 矩阵乘法 + 递推
2476: 战场的数目 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 58 Solved: 38[Submit][Status][Discuss] D ...
- 【BZOJ-1898】Swamp 沼泽鳄鱼 矩阵乘法
1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1012 Solved: 566[Submit][S ...
- 【Codeforces718C】Sasha and Array 线段树 + 矩阵乘法
C. Sasha and Array time limit per test:5 seconds memory limit per test:256 megabytes input:standard ...
随机推荐
- Python 随机数,break,continue
#-*- coding:utf-8 -*- #导入模块 import random #打印10以内的随机数 num = 5 while num > 0: #random.randint(0,10 ...
- 一种是CI(Constructor Injection)构造方法注入,另一种是SI(Set Injection) set 注入
一:这里先说一下DI(Dependency Injection)依赖注入有种表现形式:一种是CI(Constructor Injection)构造方法注入,另一种是SI(Set Injection) ...
- ti的硬件时钟和系统时钟同步
1.hwclock -w软到硬 hwclock -s 硬到软 2. 通过ntp网络时钟控制同步 3.etc下的localtime文件和GMT-8
- linux -- ubuntu桌面版安装xampp
首先,请从www.xampp.org下载最新版XAMPP. 安装 如果是xampp压缩文件 将xampp压缩文件复制到/opt下并解压.如果你计算机没有/opt目录,用 “sudo mkdir/opt ...
- Floyd算法思想
关键词:代数.图论.矩阵.松弛技术.动态规划 Floyd算法是一个经典的动态规划算法.用通俗的语言来描述的话,首先我们的目标是寻找从点i到点j的最短路径.从动态规划的角度看问题,我们需要为这个目标重新 ...
- 自定义HttpModule,用于未登录用户,不弹出Windows认证窗口,而是跳转回SSO站点
2012年的一篇随笔记录,可以学习到如何自定义HttpModule,而具体里面针对需求开发的代码,可能未必能让大伙了解到什么,可快速扫描而过. using System; using System.W ...
- Ubuntu下 Oracle sqldeveloper中文目录、文件,select查询结果中:中文乱码
是由于JDK所致.下面是网上的解决方案 解决案例1: .0_24/jre/lib/fonts.进入到fonts目录,新建文件夹 fallback cd /usr/java/jdk1..0_24/jre ...
- Word公式装逼技巧,你绝对不会!
Word论文排版是非常有技术含量的.只是纯文本格式时都有很多技巧,累倒一群人,更不用说还加上有数学公式了.有数学公式也就算了,问题是公式排版更是难上加难.想要在人前装逼一把?没有这些技巧你是绝对不行的 ...
- php错误:You don't have permission to access / on this server.
以前php环境崩溃了,重新装了个,打开第一个文件就出现: You don't have permission to access / on this server.错误,让我情以何堪啊,居然说我此台服 ...
- [java] java 设计模式(2):抽象工厂模式(Abstract Factory)
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...