\(\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的更多相关文章

  1. 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 ...

  2. 「ARC 139F」Many Xor Optimization Problems【线性做法,踩标】

    「ARC 139F」Many Xor Optimization Problems 对于一个长为 \(n\) 的序列 \(a\),我们记 \(f(a)\) 表示从 \(a\) 中选取若干数,可以得到的最 ...

  3. Solution -「CTS 2019」「洛谷 P5404」氪金手游

    \(\mathcal{Description}\)   Link.   有 \(n\) 张卡牌,第 \(i\) 张的权值 \(w_i\in\{1,2,3\}\),且取值为 \(k\) 的概率正比于 \ ...

  4. 【翻译】西川善司的「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,后篇

    http://www.4gamer.net/games/216/G021678/20140714079/     连载第2回的本回,  Arc System Works开发的格斗游戏「GUILTY G ...

  5. 「题解」「美团 CodeM 资格赛」跳格子

    目录 「题解」「美团 CodeM 资格赛」跳格子 题目描述 考场思路 思路分析及正解代码 「题解」「美团 CodeM 资格赛」跳格子 今天真的考自闭了... \(T1\) 花了 \(2h\) 都没有搞 ...

  6. Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App's Memory

    Managing Your App's Memory In this document How Android Manages Memory Sharing Memory Allocating and ...

  7. SSH连接时出现「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」解决办法

    用ssh來操控github,沒想到連線時,出現「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」,後面還有一大串英文,這時當然要向Google大神求助 ...

  8. 「Windows MFC 」「Edit Control」 控件

    「Windows MFC 」「Edit Control」 控件

  9. 「ZJOI2019」&「十二省联考 2019」题解索引

    「ZJOI2019」&「十二省联考 2019」题解索引 「ZJOI2019」 「ZJOI2019」线段树 「ZJOI2019」Minimax 搜索 「十二省联考 2019」 「十二省联考 20 ...

随机推荐

  1. dnspython模块报错 AttributeError: 'CNAME' object has no attribute 'address'

    有时候用到这个模块的时候会报错 AttributeError: 'CNAME' object has no attribute 'address' 如下所示 [root@ansible ch01]# ...

  2. spring的返回json数据给前端注意事项

    1. 记得加入SpringJSON解析包,否则spring无法将返回的pojo类解析成json数据 maven则加上下面的依赖包 <!-- SpringJSON解析包--> <jac ...

  3. Android官方文档翻译 九 2.2Adding Action Buttons

    Adding Action Buttons 增加动作按钮 This lesson teaches you to 这节课教给你 Specify the Actions in XML 在XML中指定动作 ...

  4. 《剑指offer》面试题48. 最长不含重复字符的子字符串

    问题描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度.   示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串 ...

  5. 【记录一个问题】go1.17中,把代码文件放在main.go的同级目录,导致无法编译

    写了类似目录结构的代码: myproxy - main.go - server.go 编译的时候总是出现main.go中找不到类型定义.但是用goland却可以直接执行. 最后调整了目录结构后解决: ...

  6. javascript 获取<td>标签内的值。

    当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被构造为对象的树. 通过可编程的对象模型,JavaScript 获得了足够的能力来 ...

  7. centos下APUE 例程编译-解决报错与改写例子名字。

    首先是编译生成libapue.a的库文件.按照readme的说法很简单改个目录make一下就好,但是在centos下还是有错.通过下面这篇博文<<UNIX环境高级编程中的apue.h错误& ...

  8. C# 在PDF文档中应用多种不同字体

    在PDF文档中,可绘制不同字体样式.不同语言的文字,可通过使用Standard字体.TrueType字体.CJK字体或者自定义(私有)等字体类型.下面通过C#程序代码来展示如何实现使用以上类型的字体来 ...

  9. CTF web安全45天入门学习路线

    前言 因为最近在准备开发CTF学习平台,先做一个学习路线的整理,顺便也是对想学web的学弟学妹的一些建议. 学习路线 初期 刚刚走进大学,入了web安全的坑,面对诸多漏洞必然是迷茫的,这时的首要任务就 ...

  10. limit概述

    5.limit 5.1.limit是将查询结果集的一部分取出来,通常使用在分页查询中 分页作用是为了提高用户体验,可以一页一页翻页看 5.2.limit用法:(非常重要) 完整用法:limit sta ...