【BZOJ2476】战场的数目 矩阵乘法
【BZOJ2476】战场的数目
Description
.jpg)
Input
Output
Sample Input
8
9
10
0
Sample Output
2
0
9
HINT
湖南省第六届大学生计算机程序设计竞赛
题解:我们先将周长>>=1,那么设f[i]表示:长+宽=i时的方案数。由于我们很容易求出战场是一整个矩形的方案数,所以我们可以先不考虑战场不能为矩形这个条件。
然后思考如何转移,一开始想按列转移,推出一个优美的式子,但是化简不了,结果发现要按行转移。
考虑最下面一行,如果左右两端的高度都>1,那么我们可以直接将最后一行扔掉,方案数变成f[i-1]。
如果左右两端有一端高度>1,那么我们可以将那一列扔掉,方案数变成2*f[i-1]。
如果左右两端高度都是1,那么我们将两边都扔掉,但是这种情况在上面已经被计算2次了,所以方案数要减去2*f[i-2]。
所以f[i]=3*f[i-1]-f[i-2],矩乘搞一搞~
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
const ll mod=987654321;
struct M
{
ll v[5][5];
M (){memset(v,0,sizeof(v));}
ll * operator [](int x) {return v[x];}
M operator * (M a)
{
M ret;
for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) for(int k=1;k<=3;k++) (ret[i][j]+=v[i][k]*a[k][j])%=mod;
return ret;
} };
M beg,ans,tr,x;
void pm(int y)
{
ans=beg,x=tr;
while(y)
{
if(y&1) ans=ans*x;
x=x*x,y>>=1;
}
}
int main()
{
tr[1][1]=3,tr[2][1]=-1,tr[2][3]=1,tr[1][2]=1;
beg[1][1]=5,beg[1][2]=2,beg[1][3]=1;
int p;
while(1)
{
scanf("%d",&p);
if(!p) return 0;
if(p&1)
{
printf("0\n");
continue;
}
p>>=1;
if(p<=3)
{
printf("0\n");
continue;
}
pm(p-4);
printf("%lld\n",(ans[1][1]-(p-1)+2*mod)%mod);
}
return 0;
}
//8 10 0
【BZOJ2476】战场的数目 矩阵乘法的更多相关文章
- 【BZOJ-2476】战场的数目 矩阵乘法 + 递推
2476: 战场的数目 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 58 Solved: 38[Submit][Status][Discuss] D ...
- 【bzoj2476】战场的数目 矩阵乘法优化dp
题目描述 (战场定义为对于最高的一列向两边都严格不增的“用积木搭成”的图形) 输入 输入文件最多包含25组测试数据,每个数据仅包含一行,有一个整数p(1<=p<=109),表示战场的图形周 ...
- BZOJ2476: 战场的数目(矩阵快速幂)
题意 题目链接 Sol 神仙题Orzzz 考虑两边是否有\(1\) 设\(f[i]\)表示周长为\(2i\)的方案数 第一种情况:左侧或右侧有一个1,那么把这个1删去,对应的方案数为\(f[i - 1 ...
- 【BZOJ-1898】Swamp 沼泽鳄鱼 矩阵乘法
1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1012 Solved: 566[Submit][S ...
- 【矩阵乘法经典应用】【ZOJ3497】【Mistwa】
题意:给定一个有向图(最多25个节点,每个节点的出度最多为4),给定起点和终点,然后从起点开始走,走到终点就停止,否则一直往下走,问能不能P步到达终点.也就是说从起点出发,走一条长度为P的路径,路径中 ...
- BZOJ 1009 HNOI2008 GT考试 KMP算法+矩阵乘法
标题效果:给定的长度m数字字符串s.求不包括子s长度n数字串的数目 n<=10^9 看这个O(n)它与 我们不认为这 令f[i][j]长度i号码的最后的字符串j位和s前者j数字匹配方案 例如,当 ...
- BZOJ2553[BeiJing2011]禁忌——AC自动机+概率DP+矩阵乘法
题目描述 Magic Land上的人们总是提起那个传说:他们的祖先John在那个东方岛屿帮助Koishi与其姐姐Satori最终战平.而后,Koishi恢复了读心的能力…… 如今,在John已经成为传 ...
- 【loj2325】「清华集训 2017」小Y和恐怖的奴隶主 概率dp+倍增+矩阵乘法
题目描述 你有一个m点生命值的奴隶主,奴隶主受伤未死且当前随从数目不超过k则再召唤一个m点生命值的奴隶主. T次询问,每次询问如果如果对面下出一个n点攻击力的克苏恩,你的英雄期望会受到到多少伤害. 输 ...
- 【bzoj4870】[Shoi2017]组合数问题 dp+快速幂/矩阵乘法
题目描述 输入 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 输出 一行一个整数 ...
随机推荐
- webapi net 直接更改协议头
1.直接更改协议头 [HttpGet] public HttpResponseMessage Users() { var sites = new object(); string str = tool ...
- 洛谷 P2089 烤鸡【DFS递归/10重枚举】
[链接]:https://www.luogu.org/problemnew/show/P2089 题目描述 猪猪Hanke特别喜欢吃烤鸡(本是同畜牲,相煎何太急!)Hanke吃鸡很特别,为什么特别呢? ...
- CSS3的box-shadow
基础说明: 外阴影:box-shadow: X轴 Y轴 Rpx color; 属性说明(顺序依次对应): 阴影的X轴(可以使用负值) 阴影的Y轴(可以使用负值) 阴影 ...
- linux基础学习8
管理主机每天任务: 查询登录档.追踪流量.监控用户使用主机状态.主机各项硬设备状态. 主机软件更新查询.其他使用者要求: 因此shell script 就必须要学啊,虽然可以说绝大部分shell能 ...
- 深入浅出 Cocoa 之 Core Data(3)- 使用绑定
深入浅出 Cocoa 之 Core Data(3)- 使用绑定 罗朝辉(http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 前面讲解了 Core Data 的框架, ...
- IOS开发者账号的相关配置 - 接受邀请后的步骤
说明: 1.本文主要针对企业账户, 并假定主账号已经申请到了. 2.账号类型分为3种:Agent(创建者),Admin(管理员)及Member(成员) 一. 1.申请子账号 使用Agent或Admin ...
- node/webpack/react
node是运行引擎,通过他可以直接在后端运行js语法 webpack是打包工具 react是前端框架 通过 npm 使用 React 我们建议在 React 中使用 CommonJS 模块系统,比如 ...
- GridView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL)不兼容低版本号系统解决方式
项目开发中须要使用GridView批处理操作,多项选择. 可是GridView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL)不兼容低版本号. 找 ...
- Protel中的快捷键使用(网上资源)
使用快捷键之前,将输入法切换至中文(中国)状态 Enter——选取或启动 Esc——放弃或取消 F1——启动在线帮助窗 Tab——启动浮动图件的属性窗口 Page Up——放大窗口显示比例 Page ...
- TensorFlow笔记三:从Minist数据集出发 两种经典训练方法
Minist数据集:MNIST_data 包含四个数据文件 一.方法一:经典方法 tf.matmul(X,w)+b import tensorflow as tf import numpy as np ...