Description

给你三个字符串,这些字符串有些单词模糊不可认了,用"?"来代表。
现在你可以用任意英文小写字母来代表它们。要求是使得给定的三个字符串中
所有的"?"被你认定的字母代替后,各不相同且按字典序出现。问有多少种方式。

Input

先给出一个数字N,代表数据组数。
接下来3*N行,每行给出一个字符串。长度<=1000 000

Output

输出结果 Mod 10^9+9

在末尾补0直到三个串等长,dp一下,状态表示为当前考虑了前i个位置,三个串的大小关系(1=2=3,1<2=3,1=2<3,1<2<3),预处理一下每种情况的状态转移矩阵(但矩阵乘法复杂度不优,因此直接计算)

#include<cstdio>
#include<cstring>
typedef long long i64;
const int P=1e9+;
int T,l[],ml,t[][][][][],ls[],rs[];
int f[],g[];
char s[][];
void maxs(int&a,int b){if(a<b)a=b;}
int sgn(int a,int b){return +(a>b)-(a<b);}
#define F(i,n) for(int i=0;i<n;++i)
int main(){
for(int i=;i<;++i)ls[i]=rs[i]=i;
ls[]=;rs[]=;
F(i,)F(j,)F(k,){
int(*A)[]=t[i][j][k];
for(int a=ls[i];a<=rs[i];++a)
for(int b=ls[j];b<=rs[j];++b)
for(int c=ls[k];c<=rs[k];++c){
int xx=sgn(a,b),yy=sgn(b,c);
F(x,)F(y,){
int x1=(x?xx:),y1=(y?yy:);
if(x1<&&y1<)++A[x1*+y1][x*+y];
}
}
}
for(scanf("%d",&T);T;--T){
ml=;
F(i,){
scanf("%s",s[i]);
l[i]=strlen(s[i]);
maxs(ml,l[i]);
}
F(i,){
F(j,l[i])s[i][j]=s[i][j]=='?'?:s[i][j]-'a'+;
for(int j=l[i];j<ml;++j)s[i][j]=;
}
F(a,)f[a]=g[a]=;
f[]=;
F(i,ml){
F(a,)g[a]=;
int(*A)[]=t[s[][i]][s[][i]][s[][i]];
F(a,)F(b,){
g[a]=(g[a]+i64(f[b])*A[a][b])%P;
}
F(a,)f[a]=g[a];
}
printf("%d\n",(f[]+P)%P);
}
return ;
}

bzoj3802: Vocabulary的更多相关文章

  1. bzoj千题计划234:bzoj3802: Vocabulary

    http://www.lydsy.com/JudgeOnline/problem.php?id=3802 dp[i][0/1/2/3]  表示前i个字母,第1.2个字符串,第2.3个字符串的关系分别为 ...

  2. CSS Vocabulary – CSS 词汇表,你都掌握了吗?

    CSS 是前端开发必备技能,入门容易,深入难.比如像 Pseudo-class.Pseudo-element.Media query.Media type 以及 Vendor prefix 的概念,很 ...

  3. [BEC][hujiang] Lesson03 Unit1:Working life ---Grammar & Listening & Vocabulary

    3 Working life p8 Grammar Gerund and infinitive(动名词和不定式) 一般而言:        1 动词后面接动名词还是不定式没有特定规则,主要取决于语言习 ...

  4. Vocabulary & Phrase

    Vocabulary A ANSI    美国国家标准学会,American National Standards Institute的缩写 a couple of    [口语]少数的,几个 a s ...

  5. Duplicate column name 'vocabulary'

    创建一个视图: 报错:Duplicate column name 'vocabulary' 意思是视图select的列名重复了,取别名 改成这样就ok了

  6. 11. English vocabulary 英语词汇量

    11. English vocabulary 英语词汇量 (1) The exact number of English words is not known.The large dictionari ...

  7. Easy-to-Learn English Travel Phrases and Vocabulary!

    Easy-to-Learn English Travel Phrases and Vocabulary! Share Tweet Share Tagged With: Real Life Englis ...

  8. American Football Vocabulary!

    American Football Vocabulary! Share Tweet Share You’ll learn all about the vocabulary of American fo ...

  9. week 4 Vocabulary in paper

    1.Using action verbs 1.1 deffenence between action verbs and fuzzy verbs Action verbs(strong verbs) ...

随机推荐

  1. linux kernel 卡在提示信息Waiting for root device /dev/mmcblk0p1...处

    一.背景 1.1 移植linux-4.14内核的过程中,此时使用的是ext4文件系统,并且将根文件系统存储在sd卡的第一个分区上 1.2 内核打印完Waiting for root device /d ...

  2. noip2018 爆炸记

    noip2018 爆炸记 day-4 ~ day-2 最后考了两套模拟题,题目好水啊,但是我还是爆炸了. 第一套最后一道题竟然时一道毒瘤打表?但是我看着插头DP可做啊..(然而我并不会插头DP)然后还 ...

  3. 如何创建.babelrc文件?

    方法一: 根目录下,创建  .babelrc.  文件名就可以了! 方法二: git进入根目录,输入   type>.babelrc  ,回车即可!

  4. UVa 1662 Brackets Removal

    https://vjudge.net/problem/UVA-1662 题意: 给出一个序列,判断序列中哪些括号是可以去掉的,只可以改变符号.输出括号最少的序列. 思路: 感觉这道题目就是写起来繁琐了 ...

  5. python 匹配指定后缀的文件名

    import glob x=glob.glob('*.py') print(x)

  6. 上海仪电Azure Stack技术深入浅出系列2:Azure Stack与Azure的有QoS保证的网络联通实现方法和对比测试

    本篇文章作为<Azure Stack技术深入浅出系列>的第二篇,将描述我们目前在构建基于Azure Stack混合云业务解决方案方面所面临的网络连通困难,以及相关技术人员为解决这一问题所做 ...

  7. 先对结果集排序然后做update、delete操作

    --先排序然后删除第n条数据delete from scott.emp where empno in (select empno                   from (select *    ...

  8. Spring Boot 集成 FreeMarker 详解案例(十五)

    一.Springboot 那些事 SpringBoot 很方便的集成 FreeMarker ,DAO 数据库操作层依旧用的是 Mybatis,本文将会一步一步到来如何集成 FreeMarker 以及配 ...

  9. C#金额千分位分隔

    "234234".ToString("C") 显示:¥234,234

  10. jQuery实现的手机发送验证码倒计时效果代码分享

    这是一款基于jquery实现的手机发送验证码倒计时效果代码,可实现实时显示秒数倒计时的功能,还可实现对手机号码格式验证的功能,是一款常用的网站注册发送手机验证码特效代码. 效果描述:注册一个网站,当需 ...