建立矩阵,跑快速幂

 /**************************************************************
Problem: 4000
User: idy002
Language: C++
Result: Accepted
Time:32 ms
Memory:836 kb
****************************************************************/ #include <cstdio>
#include <cstring>
#define M 6 struct Matrix {
unsigned v[<<M][<<M];
const unsigned *operator[]( int i ) const { return v[i]; }
}; int n, m, p, k, bound;
int attack[];
int stat[<<M], id[<<M], stot;
Matrix base, dest; void make_unit( Matrix &x ) {
for( int i=; i<stot; i++ )
for( int j=; j<stot; j++ )
x.v[i][j] = i==j;
}
Matrix operator*( const Matrix &a, const Matrix &b ) {
Matrix c;
for( int i=; i<stot; i++ )
for( int j=; j<stot; j++ ) {
c.v[i][j] = ;
for( int k=; k<stot; k++ )
c.v[i][j] += a[i][k]*b[k][j];
}
return c;
}
Matrix mpow( Matrix a, int b ) {
Matrix rt;
for( make_unit(rt); b; b>>=,a=a*a )
if( b& ) rt=rt*a;
return rt;
}
int getarea( int s, int a ) {
int rt = ;
for( int b=; b<m; b++ ) {
if( (s>>b)& ) {
int aa = a;
if( b<k )
aa >>= k-b;
else
aa <<= b-k;
aa &= bound;
rt |= aa;
}
}
return rt;
}
void build() {
stot = ;
memset( id, -, sizeof(id) );
for( int s=; s<=bound; s++ ) {
if( getarea(s,attack[])&s ) continue;
stat[stot]=s;
id[s] = stot;
stot++;
}
for( int s1=; s1<=bound; s1++ ) {
if( id[s1]==- ) continue;
for( int s2=; s2<=bound; s2++ ) {
if( id[s2]==- ) continue;
if( getarea(s1,attack[])&s2 ) continue;
if( getarea(s2,attack[])&s1 ) continue;
base.v[id[s1]][id[s2]] = ;
}
}
}
int main() {
scanf( "%d%d%d%d", &n, &m, &p, &k );
bound = (<<m)-;
for( int i=; i<; i++ )
for( int j=,o; j<p; j++ ) {
scanf( "%d", &o );
attack[i] = attack[i] | (o<<j);
}
attack[] ^= <<k;
build();
dest = mpow( base, n- );
unsigned ans = ;
for( int i=; i<stot; i++ )
for( int j=; j<stot; j++ )
ans += dest[i][j];
printf( "%u\n", ans );
}

bzoj 4000 矩阵快速幂优化DP的更多相关文章

  1. 2018.10.23 bzoj1297: [SCOI2009]迷路(矩阵快速幂优化dp)

    传送门 矩阵快速幂优化dp简单题. 考虑状态转移方程: f[time][u]=∑f[time−1][v]f[time][u]=\sum f[time-1][v]f[time][u]=∑f[time−1 ...

  2. 省选模拟赛 Problem 3. count (矩阵快速幂优化DP)

    Discription DarrellDarrellDarrell 在思考一道计算题. 给你一个尺寸为 1×N1 × N1×N 的长条,你可以在上面切很多刀,要求竖直地切并且且完后每块的长度都是整数. ...

  3. 2018.10.22 bzoj1009: [HNOI2008]GT考试(kmp+矩阵快速幂优化dp)

    传送门 f[i][j]f[i][j]f[i][j]表示从状态"匹配了前i位"转移到"匹配了前j位"的方案数. 这个东西单次是可以通过跳kmp的fail数组得到的 ...

  4. 2018.10.16 uoj#340. 【清华集训2017】小 Y 和恐怖的奴隶主(矩阵快速幂优化dp)

    传送门 一道不错的矩阵快速幂优化dpdpdp. 设f[i][j][k][l]f[i][j][k][l]f[i][j][k][l]表示前iii轮第iii轮还有jjj个一滴血的,kkk个两滴血的,lll个 ...

  5. 【bzoj1009】[HNOI2008]GT考试(矩阵快速幂优化dp+kmp)

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1009 这道题一看数据范围:$ n<=10^9 $,显然不是数学题就是矩乘快速幂优 ...

  6. BZOJ 1009 [HNOI2008]GT考试(矩阵快速幂优化DP+KMP)

    题意: 求长度为n的不含长为m的指定子串的字符串的个数 1s, n<=1e9, m<=50 思路: 长见识了.. 设那个指定子串为s f[i][j]表示长度为i的字符串(其中后j个字符与s ...

  7. LOJ2325. 「清华集训 2017」小 Y 和恐怖的奴隶主【矩阵快速幂优化DP】【倍增优化】

    LINK 思路 首先是考虑怎么设计dp的状态 发现奴隶主的顺序没有影响,只有生命和个数有影响,所以就可以把每个生命值的奴隶主有多少压缩成状态就可以了 然后发现无论是什么时候一个状态到另一个状态的转移都 ...

  8. bzoj1009 [HNOI2008]GT考试——KMP+矩阵快速幂优化DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1009 字符串计数DP问题啊...连题解都看了好多好久才明白,别提自己想出来的蒟蒻我... 首 ...

  9. 2019.02.11 bzoj4818: [Sdoi2017]序列计数(矩阵快速幂优化dp)

    传送门 题意简述:问有多少长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数,且其中至少有一个数是质数,答案对201704082017040820170408取模(n≤1e9, ...

随机推荐

  1. 在angular中利用分页插件进行分页

    必需:angular分页js和css  当然还有angular.js   还需要bootstrap的css angular.min.js (下面我直接把插件粘贴上去了,以免有的同学还要去找.是不是很贴 ...

  2. vim文本删除方法 Linux

    1,先打开某个文件: vim   filename 2,转到文件结尾 在命令模式输入 G 3,转到10行 在命令模式输入 10G 4,删除所有内容:先用G 转到文件尾,然后使用下面命令: :1, .d ...

  3. SQL记录-PLSQL函数

    PL/SQL函数 PL/SQL函数与过程相同,不同之处在于函数有一个返回值.因此,前面的章节中的所有讨论都适用于函数. 创建函数 建立一个独立函数可以使用CREATE FUNCTION语句创建.CRE ...

  4. Codeforces 666 B. World Tour

    http://codeforces.com/problemset/problem/666/B 题意: 给定一张边权均为1的有向图,求四个不同的点A,B,C,D,使得dis[A][B]+dis[B][C ...

  5. js调试系列: 断点与动态调试[基础篇]

    js调试系列目录: - 额,我说的不是张敬轩的 断点 这首歌,是调试用到的断点,进入正题吧. 昨天留的课后练习 1. 分析 votePost 函数是如何实现 推荐 的.其实我们已经看到了源码,只要读下 ...

  6. 移动端手势库hammerJS 2.0.4官方文档翻译(转)

    hammerJS是一个优秀的.轻量级的触屏设备手势库,现在已经更新到2.04版本,跟1.0版本有点天壤地别了,毕竟改写了事件名并新增了许多方法,允许同时监听多个手势.自定义识别器,也可以识别滑动方向. ...

  7. Tornado实现多线程、多进程HTTP服务

    背景 线上有一个相关百科的服务,返回一个query中提及的百科词条.该服务是用python实现的,以前通过thrift接口访问,现要将其改为通过HTTP访问.之前没有搭建HTTPServer的经验,因 ...

  8. Vue.js绑定内联样式

    1.对象语法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  9. RabbitMQ Headers Exchange示例

    (1).发布者 var connectionFactory = new ConnectionFactory() { HostName="192.168.205.128",UserN ...

  10. 使用NSIS制作安装包

    nsis下载地址:http://www.pc6.com/softview/SoftView_14342.html nsis使用: 启动NSIS程序主界面,选择“可视化脚本编辑器(VNISEdit)”菜 ...