AC日记——摆花
思路:
矩阵加速dp;
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define ll long long
#define mod (1000000007) struct MatrixType {
int n,m; ll ai[][]; void mem()
{
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++) ai[i][j]=;
}
} void debug()
{
printf("\n");
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++) printf("%d ",ai[i][j]);
printf("\n");
}
printf("\n");
}
}; int n,m; MatrixType mul(MatrixType aa,MatrixType bb)
{
MatrixType res;
res.n=aa.n,res.m=bb.m,res.mem();
for(int i=;i<=res.n;i++)
{
for(int j=;j<=res.m;j++)
{
for(int v=;v<=res.n;v++)
{
res.ai[i][j]=(res.ai[i][j]+aa.ai[i][v]*bb.ai[v][j])%mod;
}
}
}
return res;
} MatrixType poww(int mi,MatrixType pos)
{
MatrixType res=pos;mi--;
while(mi)
{
if(mi&) res=mul(res,pos);
pos=mul(pos,pos),mi=mi>>;
// res.debug();
}
return res;
} int main()
{
freopen("harem.in","r",stdin);
freopen("harem.out","w",stdout);
char ch[];
MatrixType pos;
scanf("%d%d",&n,&m);
pos.n=m,pos.m=m;
for(int i=;i<=m;i++) pos.ai[][i]=;
for(int i=;i<=m;i++)
{
scanf("%s",ch+),pos.ai[i][]=;
for(int j=;j<=m;j++) pos.ai[i][j]=(ch[j]-'')^;
}
// pos.debug();
MatrixType p;
p.mem(),p.n=m,p.m=;
for(int i=;i<=m;i++) p.ai[i][]=;
// p.debug();
MatrixType ans=mul(poww(n-,pos),p);
// ans.debug();
ll ans_=;
for(int i=;i<=m;i++) ans_=(ans_+ans.ai[i][])%mod;
cout<<ans_;
return ;
}
AC日记——摆花的更多相关文章
- AC日记——codevs1688求逆序对
AC日记--codevs1688求逆序对 锵炬 掭约芴巷 枷锤霍蚣 蟠道初盛 到被他尽情地踩在脚下蹂躏心中就无比的兴奋他是怎么都 ㄥ|囿楣 定要将他剁成肉泥.挫骨扬灰跟随着戴爷这么多年刁梅生 圃鳋 ...
- AC日记——楼房 codevs 2995
2995 楼房 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 地平线(x轴)上有n个矩(lou ...
- AC日记——最小的N个和 codevs 1245
1245 最小的N个和 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 有两个长度为 N ...
- AC日记——寻找道路 洛谷 P2296
题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...
- AC日记——最大数 洛谷 P1198 [JSOI2008]
题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2. 插入操作 ...
- AC日记——中位数 洛谷 P1168
题目描述 给出一个长度为N的非负整数序列A[i],对于所有1 ≤ k ≤ (N + 1) / 2,输出A[1], A[2], …, A[2k - 1]的中位数.[color=red]即[/color] ...
- AC日记——约瑟夫问题 codevs 1282
1282 约瑟夫问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 查看运行结果 题目描述 Description 有编号从1到N的N个小 ...
- AC日记——Dividing poj 1014
Dividing Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 69575 Accepted: 18138 Descri ...
- AC日记——接龙游戏 codevs 1051
1051 接龙游戏 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 给出了N个单词,已经按长度排好了序.如果 ...
随机推荐
- php实现base64图片上传方式实例代码
<?php /** * base64图片上传 * @param $base64_img * @return array */ header("content-type:text/htm ...
- 弹框中的elment-form在弹框重新打开后,怎么初始化验证信息
如果弹框关闭前有错误提示,弹框重新打开,由于没重新刷新页面,该错误还是存在.... 解决办法:弹框中的内容写成一个组件,prop接收父元素弹框的状态,并监听且reset表格 1. cnpm insta ...
- Windows下的Memcache安装与Java部署
Windows下的Memcache安装: 1. 下载memcached的windows稳定版,解压放某个盘下面,比如在c:\memcached 2. 在终端(也即cmd命令界面)下输入 ‘c:\mem ...
- ps学习笔记(二)
1)选择所有图层: Ctrl+Alt+A2)查找层:ctrl+alt+shift+f,需要在层面板输入查找层名,可自动查找层:3)隔离层:可将选择图层,更改为隔离,只对选择的层编辑:注:图层面板中有一 ...
- spring笔记(三)
Spring 第二天: 1. 代理模式 2. Aop编程 3.Spring对Jdbc的支持 JdbcTemplate工具类 思考: 程序的“事务控制”, 可以用aop实现! 即只需要写一次,运行时候动 ...
- [洛谷P4390][BOI2007]Mokia 摩基亚
题目大意: 维护一个W*W的矩阵,每次操作可以增加某格子的权值,或询问某子矩阵的总权值. 题解:CDQ分治,把询问拆成四个小矩形 卡点:无 C++ Code: #include <cstdio& ...
- big 解题报告
big 题目描述 你需要在\([0,2^n)\)中选一个整数\(x\),接着把\(x\)依次异或\(m\)个整数\(a_1\sim a_m\). 在你选出\(x\)后,你的对手需要选择恰好一个时刻(刚 ...
- 部分经典IT书籍
部分经典IT书籍 [系统,网路管理]1) Learning the Unix Operating System 1565923901 O'reilly/1997-4ed ***强力推荐给想入门unix ...
- Phaser的timer用法
1. 延迟timer,相当于setTimeout game.time.events.add(Phaser.Timer.SECOND*5,this.delayOver,this); 2. 循环timer ...
- npm install 权限的问题
用ctrl+r切换到对象的目录,以管理圆的身份执行 npm cache clean first. If that doesn’t fix things, take a look in %APPDATA ...