Gym101635C Macarons
题目链接:http://codeforces.com/gym/101635/attachments
题目大意:
给出一个 \(N \times M\) 的网格图,请你用 \(1 \times 1\) 和 \(1 \times 2\) 两种纸片填满该图,问有几种方案。
知识点: 矩阵快速幂、DFS
解题思路:
做这道题如果没有思路的话,建议先看看 \(Matrix67\) 的这篇文章。这道题就是其中的经典题目九的变形。
由于列数很少,所以我们可以利用列与列之间的状态转移。
设矩阵 \(Mat[state1][state2]\),其代表填满当前列(当前列的初始状态为\(state1\))并且使得下一列状态为 \(state2\) 的方案数(每一列的状态无非就是这一列哪些格子已经被填,哪些还没被填,我们可以用一个二进制数来表示状态)。
如此一来,我们就可以先用 \(dfs\) 来求出从第一列的各种状态转移到第二列的各种状态的方案数,然后求出 \(Mat\) 的 \(M\) 次幂 \(ans\) ,答案即为 \(ans[0][0]\).
AC代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9;
struct Matrix {
int mat[][];
};
Matrix Multiply(Matrix x, Matrix y, int n) {
Matrix temp;
memset(temp.mat, , sizeof(temp.mat));
for (int i = ; i < n; i++) {
for (int j = ; j < n; j++) {
for (int k = ; k < n; k++) {
ll tmp=(ll)x.mat[i][k] * y.mat[k][j]%mod;
temp.mat[i][j] = (int)(((ll)temp.mat[i][j]+tmp)%mod);
}
}
}
return temp;
}
Matrix Fast_Power(Matrix a, ll m, int n) {
Matrix res;
memset(res.mat, , sizeof(res.mat));
for (int i = ; i < n; i++) res.mat[i][i] = ; while (m) {
if (m & ) res = Multiply(res, a, n);
m >>= ;
a = Multiply(a, a, n);
}
return res;
} Matrix ans;
void dfs(int org,int now,int nex,int n){
int one[],two[];
memset(one,,sizeof(one));
memset(two,,sizeof(two));
int tnex=nex,tnow=now;
int ind=;
while(now){
one[ind]=now%;
now>>=;
ind++;
}
bool flag=true;
for(int i=;i<n;i++){
if(one[i]!=){
flag=false;
break;
}
} if(flag){
ans.mat[org][tnex]++;
return;
}
ind=;
while(nex){
two[ind]=nex%;
nex>>=;
ind++;
} for(int i=;i<n;i++){
if(one[i]==){
dfs(org,tnow+(<<i),tnex,n);
dfs(org,tnow+(<<i),tnex|(<<i),n);
if(i+<n&&one[i+]==){
dfs(org,tnow+(<<i)+(<<(i+)),tnex,n);
}//为了避免重复,我们不在下一列放置 2*1 的纸片
break;
}
}
}
int main(){
// freopen("in.txt","r",stdin);
int N;
ll M;
scanf("%d%lld",&N,&M);
for(int i=;i<(<<N);i++)
dfs(i,i,,N);
ans=Fast_Power(ans,M,(<<N));
printf("%d\n",ans.mat[][]);
return ;
}
Gym101635C Macarons的更多相关文章
- Echarts3 关系图-力导向布局图
因为项目需要,要求实现类似力导图效果的图,我就瞄上了echarts. 注意事项1:由于我的项目要部署到内网,所以js文件要在本地,网上大多力导图都是echarts2的,而其又依赖zrender基础库, ...
- 开源库Magicodes.ECharts使用教程
目录 1 概要 2 2 Magicodes.ECharts工作原理 3 2.1 架构说明 3 2.1.1 Axis 4 2.1.2 CommonD ...
- Echars详解
简介 ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9 /1 ...
- Echarts的基本用法
首先需要到导入echatrs.js文件 <script src="dist/echarts.js"></script> 路径配置 require.confi ...
- The 10 best sweet treats in Singapore
Every time I walk out of Changi airport's air-conditioning into the humid outdoors, there's a sweet ...
- ECharts切换主题
初始化接口,返回ECharts实例,其中dom为图表所在节点,theme为可选的主题,内置主题('macarons', 'infographic')直接传入名称,自定义扩展主题可传入主题对象.如: v ...
- Echarts个人实例
1.deviceOperateTrendIndex.jsp <%@ page language="java" contentType="text/html; cha ...
- Echart多图联动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- Echarts折线图表断点如何补全
Echarts折线图如何补全断点以及如何隐藏断点的title 做报表的时候,尤其是做图表的时候时常会碰到某一记录的值中缺少某个时间段(比如月份或季度)的值,导致图表显示残缺不全,for example ...
随机推荐
- Shutdown SpringBoot App
文章目录 Shutdown Endpoint close Application Context 退出SpringApplication 从外部程序kill App Shutdown SpringBo ...
- liunx 之 Ubuntu 网速慢解决方法
打开终端依次输入以下指令: sudo lshw -numeric -class network sudo ip addr show sudo ip route show sudo tracepath ...
- 解决vue中BMap未定义问题
原文链接: 点我 最近在项目中使用了百度地图来显示物流信息,实现方式有两种: 引用Vue Baidu Map引用BMap存在的问题:\color{red}{存在的问题:}存在的问题::使用BMap可以 ...
- Flutter 系统是如何实现ExpansionPanelList的
老孟导读:Flutter组件有一个很大的特色,那就是很多复杂的组件都是通过一个一个小组件拼装而成的,今天就来说说系统的ExpansionPanelList是如何实现的. 在了解ExpansionPan ...
- 如何对Code Review的评论进行分级
我曾写过一篇关于Code Review的文章<Code Review 最佳实践>,在文章中建议对Code Review的评论进行分级: 建议可以对Review的评论进行分级,不同级别的结果 ...
- awk调用外部程序
程序的功能很简单: 调用外部解密程序decoder,将文件第二列字段解密,然后写入新文件中. BEGIN { OFS = "\t" } { outputFileName = &qu ...
- Java笔记(day20-22)
IO流: 输入流.输出流 字节流.字符流:为了处理文字数据方便而出现的对象. (其实这些对象的内部使用的还是字节流(因为文字最终也是字节数据,只不过,通过字节流读取了相对应的字节数,没有对这些字节直接 ...
- springboot设置banner
下图是springboot项目启动的的打印数据,在log中可以清楚的看到有一个spring的banner图案,这个图案其实我们是可以自己进行设置的 我们在项目目录的resources目录下创建一个ba ...
- SpringCloudStream学习(二)RabbitMQ中的交换机跟工作模式
知识储备: 交换机: RabbitMQ中有4中交换机,分别是 (FANOUT)扇形交换机: 扇形交换机是最基本的交换机类型,它所能做的事情非常简单---广播消息.扇形交换机会把能接收到的消息全部发 ...
- Qt之connect
Qt4之connect 基本用法 connect(ui->toolButton, SIGNAL(clicked()), this, SLOT(OnClickButton())); disconn ...