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 ...
随机推荐
- Qt之QListWidget:项目的多选与单选设置
2019独角兽企业重金招聘Python工程师标准>>> #include "widget.h" #include <QApplication> #in ...
- AbstractQueuedSynchronizer与ReentrantLock
介绍 j.u.c包中的Lock定义了锁的行为. 而ReentrantLock是并发包下提供的一个锁的实现,它是一个可重入的.排他的锁. ReentrantLock有的属性也很简单,除了一个serial ...
- CloudCC CRM探讨:精细流程管理与员工悟性培养
很多企业主招聘时更喜欢专业的销售,来给他们创造价值.老板不愿意花时间在"磨刀上",而喜欢员工一来就"砍柴".即使是建立培训机制,仍然很大程度依赖于员工自己的悟性 ...
- HTML5 Canvas指纹及反追踪介绍
1 Canvas指纹的简介很多网站通过Canvas指纹来跟踪用户.browserleaks[1]是一个在线检测canvas指纹的网站.一般的指纹实现原理即通过canvas画布绘制一些图形,填写一些文字 ...
- Windows+Ubuntu双系统 ,Ubuntu安装
这篇只是简单记录自己在Win10下另安装Ubuntu系统. 不是教程,因为不会. 推荐一个教程:https://blog.csdn.net/weixin_37029453/article/detail ...
- unittest(生成 HTMLTestRunner 模块)
一:生成 HTMLTestRunner 模块 unittest 里面是不能生成 html 格式报告的,需要导入一个第三方的模块:HTMLTestRunner 方法1.这个模块下载不能通过 pip 安装 ...
- Java——Java连接Jira,创建、修改、删除工单信息
还不了解Jira是什么的同学可以看一下这篇文章:https://www.cnblogs.com/wgblog-code/p/11750767.html 本篇文章主要介绍如何使用Java操作Jira,包 ...
- 基于情感词典的python情感分析
近期老师给我们安排了一个大作业,要求根据情感词典对微博语料进行情感分析.于是在网上狂找资料,看相关书籍,终于搞出了这个任务.现在做做笔记,总结一下本次的任务,同时也给遇到有同样需求的人,提供一点帮助. ...
- Boosting算法总结(ada boosting、GBDT、XGBoost)
把之前学习xgb过程中查找的资料整理分享出来,方便有需要的朋友查看,求大家点赞支持,哈哈哈 作者:tangg, qq:577305810 一.Boosting算法 boosting算法有许多种具体算法 ...
- X Error:BadDrawable (individ Pixmap or Window parameter 9)
#描述 平台:aarch64 系统:ubuntu16.04.02 Qt Version:4.8.7 Qt程序可以正常运行,界面渲染出现问题以及乱码,控制提示错误内容: "unable to ...