Solution -「ARC 058C」「AT 1975」Iroha and Haiku
\(\mathcal{Description}\)
Link.
称一个正整数序列为“俳(pái)句”,当且仅当序列中存在连续一段和为 \(x\),紧接着连续一段和为 \(y\),再紧接着连续一段和为 \(z\),其中 \(x,y,z\) 为给定正整数。计数长度为 \(n\),元素大小不超过 \(10\) 的俳句。
\(n\le40\),\(x+y+z\le17\)。
\(\mathcal{Solution}\)
通过俳句的特征(连续三段和的限制)来正向计数会重复:一个俳句可能有多段满足特征。正难则反,考虑计数不是俳句的序列数。
如何定义状态呢?我们把 “\(x+y+z\)” 展开称一条长度为 \(x+y+z\) 的链。序列中的每个数可以占领位置中的 \(1\sim10\) 个位置。我们就只关心三个段的结束位置是否是某个数的结束位置即可。把某个数的结束位置设为 \(1\),其余位置设为 \(0\),就得到了一个 \(01\) 状态。例如 \(x=2,y=3,z=2\),那么 \(0100101\) 或 \(0111111\) 是俳句。
于是,令 \(f(i,S)\) 表示前 \(i\) 个数,后缀状态为 \(S\) 的非俳句个数,转移时排除所有俳句状态即可。
复杂度 \(\mathcal O(10n\cdot2^{x+y+z})\)。
\(\mathcal{Code}\)
#include <cstdio>
const int MAXN = 40, MAXL = 17, MOD = 1e9 + 7;
int n, x, y, z, f[2][1 << MAXL];
inline void add_eq ( int& a, const int b ) { if ( ( a += b ) >= MOD ) a -= MOD; }
int main () {
scanf ( "%d %d %d %d", &n, &x, &y, &z );
int all = ( 1 << x + y + z ) - 1, ans = 1;
int haiku = ( 1 << x + y + z >> 1 ) | ( 1 << y + z >> 1 ) | ( 1 << z >> 1 );
f[0][0] = 1;
for ( int i = 0, t = 0; i < n; ++ i, t ^= 1, ans = ans * 10ll % MOD ) {
for ( int s = 0; s <= all; ++ s ) {
int& cur = f[t][s];
if ( ! cur ) continue;
for ( int j = 1, trs; j <= 10; ++ j ) {
trs = ( s << j | ( 1 << j >> 1 ) ) & all;
if ( ( trs & haiku ) ^ haiku ) add_eq ( f[t ^ 1][trs], cur );
}
cur = 0;
}
}
int sub = 0;
for ( int i = 0; i <= all; ++ i ) add_eq ( sub, f[n & 1][i] );
printf ( "%d\n", ( ans - sub + MOD ) % MOD );
return 0;
}
Solution -「ARC 058C」「AT 1975」Iroha and Haiku的更多相关文章
- Solution Set -「ARC 107」
「ARC 107A」Simple Math Link. 答案为: \[\frac{a(a+1)\cdot b(b+1)\cdot c(c+1)}{8} \] 「ARC 107B」Quadrup ...
- 「ARC 139F」Many Xor Optimization Problems【线性做法,踩标】
「ARC 139F」Many Xor Optimization Problems 对于一个长为 \(n\) 的序列 \(a\),我们记 \(f(a)\) 表示从 \(a\) 中选取若干数,可以得到的最 ...
- Solution -「CTS 2019」「洛谷 P5404」氪金手游
\(\mathcal{Description}\) Link. 有 \(n\) 张卡牌,第 \(i\) 张的权值 \(w_i\in\{1,2,3\}\),且取值为 \(k\) 的概率正比于 \ ...
- 【翻译】西川善司的「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,后篇
http://www.4gamer.net/games/216/G021678/20140714079/ 连载第2回的本回, Arc System Works开发的格斗游戏「GUILTY G ...
- 「题解」「美团 CodeM 资格赛」跳格子
目录 「题解」「美团 CodeM 资格赛」跳格子 题目描述 考场思路 思路分析及正解代码 「题解」「美团 CodeM 资格赛」跳格子 今天真的考自闭了... \(T1\) 花了 \(2h\) 都没有搞 ...
- Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App's Memory
Managing Your App's Memory In this document How Android Manages Memory Sharing Memory Allocating and ...
- SSH连接时出现「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」解决办法
用ssh來操控github,沒想到連線時,出現「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」,後面還有一大串英文,這時當然要向Google大神求助 ...
- 「Windows MFC 」「Edit Control」 控件
「Windows MFC 」「Edit Control」 控件
- 「ZJOI2019」&「十二省联考 2019」题解索引
「ZJOI2019」&「十二省联考 2019」题解索引 「ZJOI2019」 「ZJOI2019」线段树 「ZJOI2019」Minimax 搜索 「十二省联考 2019」 「十二省联考 20 ...
随机推荐
- git branch --set-upstream-to 本地关联远程分支
最近使用git pull的时候多次碰见下面的情况: There is no tracking information for the current branch. Please specify wh ...
- 微信小程序css继承
在微信小程序里写的全局样式,pages里的组件是可以继承的,但是components里只能继承font和color属性.
- Cookie.Session到Token和JWT
一.session和cookie: 现在一般都是session和cookie一起用,一起提.但是他们俩其实不是一定要在一起. session的产生原因是,http协议是无状态的 这就导致了,不同的用户 ...
- 利用Word2010制作流程图
利用Word2010制作流程图 原文链接:https://www.toutiao.com/i6483034968225235469/ 一.页面和段落的设置 启动Word2010,打开一个空白文档,并切 ...
- TestNG 运行Webdriver测试用例
1.单击选中的新建工程的名称,按Ctrl+N组合键,弹出对话框选择"TestNG"下的"TestNG class"选项,点击"next" 2 ...
- Java集合-LinkedList源码分析
目录 1.数据结构-链表 2.ArrayList结构特性 3.构造方法 4.成员变量 5.常用的成员方法 6.Node节点 7.序列化原理 8.迭代器 9.总结 1.数据结构-链表 链表(Linked ...
- Solon Web 开发,七、视图模板与Mvc注解
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- JSP页面打印输出,两种方法。out、《%=
使用out.println()输出: <%@ page contentType="text/html;charset=UTF-8"%> <html> < ...
- mate10碎屏机当成小电脑使用尝试
1.屏碎了修起来300-400,自己动手至少也要260以上买个屏幕钱. 手机图案锁屏也不知道密码,给我手机的亲戚忘了.当年手机被车压弯了. 对着恢复教程,盲屏幕猜着按还原了. 2.之后一路从8代系统更 ...
- visual studio进行机器学习与python编写
visual studio里的python安装之后自带一个虚拟环境 1.anaconda有些包版本无法到最新. 2.包管理器在安装卸载,强制停止后,包管理器会出问题,一直卸不掉那个包. 在卸载pyth ...