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个单词,已经按长度排好了序.如果 ...
随机推荐
- $.ajax()方法参数总结
url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址.type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和d ...
- Codeforces数据结构(水题)小结
最近在使用codeblock,所以就先刷一些水题上上手 使用codeblock遇到的问题 1.无法进行编译-------从setting中的编译器设置中配置编译器 2.建立cpp后无法调试------ ...
- [BZOJ3196][Tyvj1730]二逼平衡树
[BZOJ3196][Tyvj1730]二逼平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 查询 \(k\) 在区间内的排名 查询区间内排名为 \ ...
- POJ 2398 Toy Storage 二分+叉积
Description Mom and dad have a problem: their child, Reza, never puts his toys away when he is finis ...
- scrapy 为每个pipeline配置spider
在settings.py里面配置pipeline,这里的配置的pipeline会作用于所有的spider,我们可以为每一个spider配置不同的pipeline, 设置 Spider 的 custom ...
- Java之戳中痛点 - (4)i++ 和 ++i 探究原理
先看一个例子: package com.test; public class AutoIncrement { public static void main(String[] args) { int ...
- SQLyog 使用笔记,自增主键数据冲突错误
select max(id) from test ; desc test ; insert into test (a,b,c) values ('abc','123-213','test'); RE ...
- react 记录:运行npm run eject命令暴露配置文件都报这个错误
问题: react 使用create-react-app命令创建一个项目,运行npm run eject命令暴露配置文件都报这个错误 原因:主要是脚手架添加 .gitgnore文件,但是却没有本地仓库 ...
- 【BZOJ4008】【HNOI2015】亚瑟王 [期望DP]
亚瑟王 Time Limit: 20 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 小 K 不慎被 LL 邪教洗脑了,洗 ...
- [BZOJ2453]维护队列|分块
Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少.当然,A有时候会 ...