nyoj-1273 宣传墙
- 题目1273
- 题目信息
- 运行结果
- 本题排行
- 讨论区
宣传墙
- 描述
-
ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多。CBA 镇长准备在一条道路南 面 4*N 的墙上做一系列的宣传。为了统一规划,CBA 镇长要求每个宣传栏只能占相邻的两个方格 位置。但这条道路被另一条道路分割成左右两段。CBA 镇长想知道,若每个位置都贴上宣传栏, 左右两段各有有多少种不同的张贴方案。 例如: N=6,M=3, K=2, 左,右边各有 5 种不同的张贴方案
- 输入
-
第一行: T 表示以下有 T 组测试数据 ( 1≤T ≤8 )
接下来有T行, 每行三个正整数 N M K 分别表示道路的长度,另一条道路的起点和宽度
(1≤ N ,M ≤ 1 000 000, 1≤ K ≤ 100000) - 输出
-
每组测试数据,输出占一行:两个整数,分别表示左右两段不同的张贴方案数。由于方案总数
可能很大,请输出对 997 取模后的结果。 - 样例输入
-
2 6 3 2 5 3 2
- 样例输出
-
5 5 5 1
- 来源
河南省第九届省赛
矩阵快速幂解法,加判断数组,时间超短8ms,内存小8648
#include <iostream>
#include <cstdio>
#include <cstring>using namespace std;const int MOD = 997;
const int MAXN = 16;struct mat
{int A[MAXN][MAXN];mat(){memset(A, 0, sizeof(A));}mat operator * (const mat &a) const{mat b;for (int i = 0; i < MAXN; i++){for (int j = 0; j < MAXN; j++){for (int k = 0; k < MAXN; k++){b.A[i][j] += A[i][k] * a.A[k][j];b.A[i][j] %= MOD;}}}return b;}
};mat map;bool cmp(int i, int j) // 状态 j 对状态 i 是否可行 j 是 col 列的状态 i 是 col - 1 列的状态
{for (int row = 0; row < 4; row++){if ((i >> row) & 1){if ((j >> row) & 1){
// if (row == 3) // 这个特判有没有都行,因为 i >> 4 肯定为 0
// { // 这样不过是思维更严谨些
// return false;
// }if ((i >> (row + 1)) & 1){i -= (1 << (row + 1)); // 等价于 i ^= 1 << (rank + 1),前边的写法不太直观}else{return false;}}else{continue;}}else{if ((j >> row) & 1){continue;}else{return false;}}}return true;
}// 构造单元矩阵
void unit()
{for (int i = 0; i < MAXN; i++){for (int j = 0; j < MAXN; j++){map.A[i][j] = cmp(i, j);}}
}int slove(int n)
{mat a;mat b = map;for (int i = 0; i < MAXN; i++){a.A[i][i] = 1;}while (n){if (n & 1){a = a * b;}b = b * b;n >>= 1;}return a.A[MAXN - 1][MAXN - 1];
}int main ()
{int T;scanf("%d", &T);unit();while (T--){int N, M, K;scanf("%d%d%d", &N, &M, &K);printf("%d %d\n", slove(M - 1), slove(N - M - K + 1));}return 0;
}
状态压缩 DP
滚动数组解法 时间长713ms,内存大 94896
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const int col = 4;
int row;
int dp[900000][1<<4]; void dfs(int r,int c,int pre,int now)
{ if(c==col) { dp[r][now] += dp[r-1][pre]; dp[r][now] %= 997; return ; } if(c+1<=col) { dfs(r,c+1,pre<<1,(now<<1)|1); dfs(r,c+1,(pre<<1)|1 ,now<<1); } if(c+2<=col) { dfs(r,c+2,(pre<<2)|3,(now<<2)|3); }
}
int main()
{ int T,N,M,K; scanf("%d",&T); while(T--) { scanf("%d%d%d",&N,&M,&K); row = M - 1; if(row<=0) { printf("0 "); } else { memset(dp,0,sizeof(dp)); dp[0][(1<<col)-1] = 1; for(int i=1;i<=row;i++) { dfs(i,0,0,0); } printf("%d ",dp[row][(1<<col)-1]); } row = N - M - K + 1; if(row<=0) { printf("0\n"); } else { memset(dp,0,sizeof(dp)); dp[0][(1<<col)-1] = 1; for(int i=1;i<=row;i++) { dfs(i,0,0,0); } printf("%d\n",dp[row][(1<<col)-1]); } } return 0;
}
nyoj-1273 宣传墙相关推荐
- nyoj 1273 宣传墙
题目链接:点击打开链接 题意:给你一个4*n的矩阵,你有1*2的砖头若干,让你进行铺砖,在中间m ---- m+k的部分你不用铺.问左边和右边的方法数各位多少. 题解:因为数据偏大,需要滚动数组来优化 ...
- 骨牌覆盖问题总结!hihoCoder/ NYOJ-1273宣传墙1151
本想着做一下第九届河南省省赛题,结果被这个类似骨牌覆盖的题卡住了,队友然我去hihoCoder上老老实实把骨牌覆盖一.二.三做完,这题就没什么问题了.虽然很不情愿,但还是去见识了一下. 骨牌覆盖问题 ...
- nyoj1273 河南省第九届省赛_宣传墙、状压DP+矩阵幂加速
宣传墙 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多.CBA 镇长准备在一条道路南 面 4*N 的墙上做 ...
- NYOJ_1273_宣传墙
/* 宣传墙 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多.CBA 镇长准备在一条道路南 面 4*N 的 ...
- NYOJ - [第九届河南省程序设计大赛]宣传墙(DP)
题目链接:http://nyoj.top/problem/1273 内存限制:64MB 时间限制:1000ms 题目描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多.CBA 镇长准 ...
- 第九届河南省赛 宣传墙 //状压dp+矩阵快速幂+dfs
http://nyoj.top/problem/1273 状压dp+矩阵快速幂+dfs 1273-宣传墙 内存限制:64MB 时间限制:1000ms 特判: No 通过数:19 提交数:64 难度:4 ...
- 【ACM省赛】第九届河南省程序设计大赛 B 宣传墙
题目链接:http://nyoj.top/web/contest/problem/cid/13/num/B 题目: 用1*2的地砖,填满4*N的墙,有多少种方案. 题解: 状压dp,枚举每个状态的可能 ...
- ZZULIOJ 1924: 宣传墙 (dp)
时间限制: 1 Sec 内存限制: 128 MB 提交: 53 解决: 16 [提交] [状态] [讨论版] [命题人:admin] 题目描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的 ...
- 计算机社团宣传招新活动方案,社团招新策划书范本及活动方案
社团招新策划书范本及活动方案 新的学期,新的开始,在社团招新活动开始前,如何写策划书呢?以下是小编为大家提供的社团招新策划书范本,供大家参考借鉴! 社团招新策划书范本(一):青年志愿者协会 一.招新目 ...
最新文章
- ffmpeg architecture(下)
- (一)Android Studio 安装部署 华丽躲坑
- DIY Ruby CPU 分析 Part III
- 【Python】pycharm去掉代码下的波浪线
- 一个关于c++string比较的问题
- 如何优雅地使用 VSCode 来编辑 vue 文件?
- html5 crosshair,嘿,纯正ROG血统 CROSSHAIR VIII IMPACT (开箱篇)最终版
- C++面试题,平时面试不可缺少的!
- Entity Framework 实践系列 —— 搞好关系 - 两情相悦(双向一对一)
- Caused by: org.hibernate.HibernateException: unknown Oracle major version [0]
- C#反编译工具:ILSpy
- 软件工程——软件计划
- 游戏辅助,python制作王者荣耀刷金币脚本!
- 获取按键精灵论坛网页源文件
- 在outlook客户端设置阿里企业邮箱
- 使用DNS来屏蔽广告
- win8计算机的录音功能,win8电脑录音机功能在哪|win8录音功能使用方法
- Linux RS232驱动实验
- RSS MSE RMSE之间的关系
- 马斯克“超级高铁”成功测速355km|h,不过仅比我国“复兴号”快5km|h