题意:求NOI的合法串。。。

思路:

首先这个似乎和后缀自动机没关系(话说TJ不考后缀自动机??),其实就是一个\(DP\)套\(DP\),考虑如果不看兑奖串就是一个LCS,当出现时多记一维即可。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
const int mod = 1e9+7;
int bit[maxn];
int t[maxn][3];
int dp[21];
int g[21];
int f[2][maxn][3][3];
int ans[21];
int n,m;
int k;
int a[21];
char s[21];
int nw = 1;
int nxt;
inline int read() {
int q=0,f=1;char ch = getchar();
while(!isdigit(ch)) {
if(ch=='-') f = -1;ch = getchar();
}
while(isdigit(ch)) {
q=q*10+ch-'0';ch = getchar();
}
return q*f;
}
inline void upd(int &x,int y) {
x += y;
if(x >= mod) x -= mod;
} int main () {
m = read(),n = read();
scanf("%s",s+1);
int lim = (1 << n);
for(int i = 1;i < lim; ++i) {
bit[i] = bit[i >> 1] + (i & 1);
}
for(int i = 1;i <= n; ++i) {
if(s[i] == 'N') a[i] = 0;
if(s[i] == 'O') a[i] = 1;
if(s[i] == 'I') a[i] = 2;
}
for(int k = 0;k < lim; ++k) {
for(int i = 1;i <= n; ++i) {
dp[i] = dp[i - 1] + (k >> (n - i) & 1);
}
for(int i = 0;i < 3; ++i) {
for(int j = 1;j <= n; ++j) {
if(i == a[j]) {
g[j] = dp[j - 1] + 1;
}
else g[j] = max(g[j - 1],dp[j]);
}
for(int j = 1;j <= n; ++j) {
if(g[j] == g[j - 1] + 1) {
t[k][i] |= 1 <<n - j;
}
}
}
}
f[0][0][0][0] = 1;
for(int i = 1;i <= m; ++i) {
swap(nw,nxt);
for(int j = 0;j < lim; ++j) {
memset(f[nxt][j],0,sizeof(f[nxt][j]));
}
if(i <= 2) {
for(int j = 0;j < lim; ++j) {
for(int k = 0;k < 3; ++k) {
for(int l = 0;l < 3; ++l) {
if(f[nw][j][k][l])
for(int r = 0;r < 3; ++r) {
upd(f[nxt][t[j][r]][l][r],f[nw][j][k][l]);
}
}
}
}
}
else {
for(int j = 0;j < lim ;++j) {
for(int k = 0;k < 3; ++k) {
for(int l = 0;l < 3; ++l) {
if(f[nw][j][k][l]) {
int res = f[nw][j][k][l];
for(int r = 0;r < 3; ++r) {
if(!k && l == 1 && r == 2) continue;
upd(f[nxt][t[j][r]][l][r],res);
}
}
}
}
}
}
}
for(int i = 0;i < lim; ++i) {
for(int j = 0;j < 3; ++j) {
for(int k = 0;k < 3 ; ++k) {
upd(ans[bit[i]],f[nxt][i][j][k]);
}
}
}
for(int i = 0;i <= n; ++i) printf("%d\n",ans[i]);
return 0;
}

[TJOI 2018]游园会的更多相关文章

  1. 「TJOI 2018」游园会 Party

    「TJOI 2018」游园会 Party 题目描述 小豆参加了 \(NOI\) 的游园会,会场上每完成一个项目就会获得一个奖章,奖章只会是 \(N, O, I\) 的字样. 在会场上他收集到了 \(K ...

  2. 「TJOI 2018」教科书般的亵渎

    「TJOI 2018」教科书般的亵渎 题目描述 小豆喜欢玩游戏,现在他在玩一个游戏遇到这样的场面,每个怪的血量为 \(a_i\) ,且每个怪物血量均不相同, 小豆手里有无限张"亵渎" ...

  3. [TJOI 2018]智力竞赛

    Description 题库链接 给出一张 \(m\) 个点的有向图.问可重最小路径覆盖是否 \(\leq n+1\) .若不,求最多用 \(n+1\) 条路径去覆盖,最大化未覆盖点点权最小值. \( ...

  4. [TJOI 2018] XOR

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=5338 [算法] 首先对这棵树进行树链剖分 那么我们就将一个树上的问题转化为一个序列上 ...

  5. 【TJOI 2018】数学计算

    [题目链接] 点击打开链接 [算法] 线段树维护区间乘积 [代码] #include<bits/stdc++.h> using namespace std; #define MAXQ 10 ...

  6. 2018. The Debut Album

    http://acm.timus.ru/problem.aspx?space=1&num=2018 真心爱过,怎么能彻底忘掉 题目大意: 长度为n的串,由1和2组成,连续的1不能超过a个,连续 ...

  7. Math.abs(~2018),掌握规律即可!

    Math.abs(~2018) 某前端群的入门问题长姿势了,一个简单的入门问题却引发了我的思考,深深的体会到自己在学习前端技术的同时忽略遗忘了一些计算机的基础知识. 对于 JS Math对象没什么可说 ...

  8. bzoj-3170 3170: [Tjoi 2013]松鼠聚会(计算几何)

    题目链接: 3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec  Memory Limit: 128 MB Description 有N个小松鼠,它们的家用一个点x,y表 ...

  9. BZOJ3170: [Tjoi 2013]松鼠聚会

    3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 531  Solved: 249[Submit][Statu ...

随机推荐

  1. python 如何写好main函数

    每个程序员在学习编程的过程中,肯定没少写过main()函数,Python程序员也不例外.本文为大家分享Python之父Guido van Rossum推荐的函数写法,可以大大提高这个函数的灵活性. 一 ...

  2. js 购物车的数量加减,对应的总价也随机变化

    html相关的源码: <div class="goods_num clearfix"> <div class="num_name fl"> ...

  3. Js数据类型和运算符

    1.数据类型      原始类型:数值 字符串 布尔值: 复杂类型:对象:             数值(number)                      特殊的数值:NaN,NaN不等于任何 ...

  4. Delphi 数学函数:常用的几个数学函数(Power、Abs、Int、Trunc、Round、Frac、sqr、sqrt)

    Delphi 常用的几个数学函数 1 Power函数,求次方 定义:function Power(X,Y): (Same type as parameter); 说明:X可以是整型,也可以是实型:返回 ...

  5. 阿里云HBase推出全新X-Pack服务 定义HBase云服务新标准

    2018年12月13日,第八届中国云计算标准和应用大会在京召开,会上阿里云HBase宣布推出全新X-Pack服务,支持SQL.时序.时空.图.全文检索能力.复杂分析,从处理到分析全栈式数据库,客户开箱 ...

  6. NX二次开发-UFUN获取当前导出CGM选项设置UF_CGM_ask_session_export_options

    文章转载自唐康林NX二次开发论坛,原文出处: http://www.nxopen.cn/thread-126-1-1.html 刚才有同学问到这个问题,如果是用NXOpen来做,直接录制一下就可以了: ...

  7. $nextTick与nextTick

    $nextTick Data-Dom-之后回调 nextTick Data-回调-Dom

  8. day28-描述符应用与类的装饰器

    #!/usr/bin/env python# -*- coding:utf-8 -*-# ------------------------------------------------------- ...

  9. Rabbit MQ 基础入门

    Rabbit MQ 学习(一)基础入门 简介 RabbitMQ 简介 为什么选择 RabbitMQ RabbitMQ 的模型架构是什么? AMQP 协议是什么? AMQP 常用命令 概念 生产者和消费 ...

  10. 20140402 cmake编译错误原因 同时装了vs2010和vs2012

    1.cmake编译错误原因 在用cmake编译opencv出现的错误 The CXX compiler identification is MSVC 16.0.30319.1 The C compil ...