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个单词,已经按长度排好了序.如果 ...
随机推荐
- capacilitys 持续集成
目前看好像是说以docker为例来看看这个权限到底是怎么来的? 可以通过在二进制上setcap得到,也可以通过函数自己用setcap得到,两种方法,docker肯定是第二种方法啊,docker中间肯定 ...
- java 利用反射完成自定义注解
元注解: 元注解的作用就是负责注解其他注解.Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明.Java5.0定义的元注解: 1.@ ...
- [UVA1625]Color Length
题面在这里 description 输入两个长度分别为\(n\)和\(m\)的颜色序列,要求按顺序合并成同一个序列,即每次可以把一个序列开头的颜色放到新序列的尾部. 对于每个颜色\(c\)来说,其跨度 ...
- [bzoj2901]矩阵求和
题目大意:给出两个$n\times n$的矩阵,$m$次询问它们的积中给定子矩阵的数值和. 题解:令为$P\times Q=R$ $$\begin{align*}&\sum\limits_{i ...
- BZOJ 2707: [SDOI2012]走迷宫 拓扑+高斯消元+期望概率dp+Tarjan
先Tarjan缩点 强连通分量里用高斯消元外面直接转移 注意删掉终点出边和拓扑 #include<cstdio> #include<cstring> #include<a ...
- Small things are better
Yesterday I had fun time repairing 1.5Tb ext3 partition, containing many millions of files. Of cours ...
- Codeforces Round #523 (Div. 2) A. Coins
A. Coins 题目链接:https://codeforc.es/contest/1061/problem/A 题意: 给出n和s,要在1-n中选数(可重复),问最少选多少数可以使其和为s. 题解: ...
- expect 实现本地到远程的scp
expect文件demo 令文件名为test.exp #!/usr/bin/expect -f set timeout -1 set pwd " set src_file [lindex $ ...
- css之postion定位
css position之初识 我们先看看position定位有那几个属性,下面是我从w3c的截图,为我们认识定位做初步的了解 通过上面这张图嘞,我们知道了position有5个属性,那么下面,我就来 ...
- Rem与em的简单理解
Rem与em的简单理解 Em单位与像素px的转换 所得的像素值 = 当前元素的font-size * em的值 比如:div的font-size:12px 10em等同于120px 12*10 =12 ...