【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 输出 一行一个整数 ...
随机推荐
- LeetCode OJ-- Binary Tree Maximum Path Sum ***
https://oj.leetcode.com/problems/binary-tree-maximum-path-sum/ 给一棵二叉树,路径可以从任一点起,到任一点结束,但是可以连成一个路径的.求 ...
- SVG描边动画实现过程
准备工具:Adobe AI+PS 1.确定SVG画布的大小,在PS中切出需要描边效果的区域,以此区域的大小做为SVG容器的大小. 2.将PS中切好的图片直接拖拽到AI中 3.使用AI中的钢 ...
- POJ 3254 Corn Fields [DP]
题意:略. 思路:第一次做状态压缩的dp. 在这里说一下状态压缩的原则.因为每一行只有最多12个格子,每个格子只有1(可放牛)和0(不可放牛)两种状态,这总共是2^12种状态,直接用一个int整型变量 ...
- Spring Cloud学习总结(非原创)
文章大纲 一.课程内容总结二.课程学习地址三.学习资料下载四.参考文章 一.课程内容总结 二.课程学习地址 第一天:https://www.jianshu.com/p/a086421f4bfd第二 ...
- 基于WPF系统框架设计(8)-PasswordBox传值到ViewMode
应用场景 我要做一个系统登录功能,需要传用户名和密码到ViewModel中,可是PasswordBox传值到ViewModel中好像跟TextBox等控件不一样.这里需要用到附加属性. 附加属性:一个 ...
- Displaying Tabbed and Stacked Canvas Using Show_View In Oracle Forms
Displays the indicated canvas at the coordinates specified by the canvas's X Position and Y Position ...
- 修改Tomcat服务中的端口配置
1.修改Tomcat服务中的端口配置: 分别修改安装目录下的conf子目录中的server.xml文件(注意:两个文件中对应的端口号要不一样),修改如下 : a. 修改Shutdown端口(默认为80 ...
- python 工具 字符串转numpy浮点数组
不同的数字之间使用 空格“ ”,“$”,"*"等隔开,支持带小数点的字符串NumArray=str2num(LineString,comment='#')将字符串中的所有非Doub ...
- 跨域问题解决方式(HttpClient安全跨域 & jsonp跨域)
1 错误场景 今天要把项目部署到外网的时候,出现了这种问题, 我把两个项目放到自己本机的tomcat下, 进行代码调试, 执行 都没有问题的, 一旦把我须要调用接口的项目B放到其它的server上, ...
- leetcode第一刷_Word Search
这道题之前一直没敢做,没想到前天用递归一遍过了. . 当时为什么想着用递归,而不是dp呢.由于我想到达某个位置的情况有非常多,即使从当前位置開始的搜索是已知的,但之前的状态是如何的也无从得知啊,实话实 ...