bzoj千题计划234:bzoj3802: Vocabulary
http://www.lydsy.com/JudgeOnline/problem.php?id=3802
dp[i][0/1/2/3] 表示前i个字母,第1、2个字符串,第2、3个字符串的关系分别为 < < , = < , < = , = =
枚举前i-1个字母 构成的关系
再枚举3个字符串的字母 转移
时间复杂度为 O(N* 26^3)
优化转移:
转移都是dp[i-1][0/1/2/3]-->dp[i][0/1/2/3]
预处理出f[i][j][k][s:0~3][t:0~3] 表示前面字母构成的字符串的关系为s,3个字符串分别加上1个字母i、j、k后转移到关系t的方案数
转移的时候不枚举3个字符串的字母,枚举新的关系0~3
直接用f数组转移
#include<cstdio>
#include<cstring> using namespace std; #define N 1000002 const int mod=1e9+; char s1[N],s2[N],s3[N]; int f[][][][][];
int dp[N][];
//0:i<j<k 1:i=j<k 2:i<j=k 3:i=j=k void pre()
{
int li,ri,lj,rj,lk,rk;
int t;
for(int i=;i<=;++i)
for(int j=;j<=;++j)
for(int k=;k<=;++k)
{
if(i==) li=,ri=;
else li=ri=i;
if(j==) lj=,rj=;
else lj=rj=j;
if(k==) lk=,rk=;
else lk=rk=k;
for(int ci=li;ci<=ri;++ci)
for(int cj=lj;cj<=rj;++cj)
for(int ck=lk;ck<=rk;++ck)
for(int s=;s<=;++s)
{
if(!s) t=;
else if(s==)
{
if(ci==cj) t=;
else if(ci<cj) t=;
else t=-;
}
else if(s==)
{
if(cj==ck) t=;
else if(cj<ck) t=;
else t=-;
}
else
{
if(ci>cj || ci>ck || cj>ck) t=-;
else if(ci<cj && cj<ck) t=;
else if(ci==cj && cj<ck) t=;
else if(ci<cj && cj==ck) t=;
else t=;
}
if(t>=) f[i][j][k][s][t]++;
}
}
} int main()
{
pre();
int T;
scanf("%d",&T);
int l1,l2,l3,len;
int x,y,z;
while(T--)
{
scanf("%s",s1+);
scanf("%s",s2+);
scanf("%s",s3+);
l1=strlen(s1+);
len=l1;
l2=strlen(s2+);
if(l2>len) len=l2;
l3=strlen(s3+);
if(l3>len) len=l3;
while(l1!=len) s1[++l1]='a'-;
while(l2!=len) s2[++l2]='a'-;
while(l3!=len) s3[++l3]='a'-;
for(int i=;i<=len;++i)
for(int j=;j<=;++j)
dp[i][j]=;
dp[][]=;
for(int i=;i<=len;++i)
{
x=s1[i]-'a'+;
if(x<) x=;
y=s2[i]-'a'+;
if(y<) y=;
z=s3[i]-'a'+;
if(z<) z=;
for(int j=;j<=;++j)
if(dp[i-][j])
for(int k=;k<=;++k)
dp[i][k]=(dp[i][k]+(long long)dp[i-][j]*f[x][y][z][j][k]%mod)%mod;
}
printf("%d\n",dp[len][]);
}
}
3802: Vocabulary
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 185 Solved: 68
[Submit][Status][Discuss]
Description
Input
Output
输出结果 Mod 10^9+9
Sample Input
?heoret?cal
c?mputer
?cience
jagiellonia
?niversity
kra?ow
?
b
c
Sample Output
52
1
bzoj千题计划234:bzoj3802: Vocabulary的更多相关文章
- bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
- bzoj千题计划196:bzoj4826: [Hnoi2017]影魔
http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...
- bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪
http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...
- bzoj千题计划177:bzoj1858: [Scoi2010]序列操作
http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...
- bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)
https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...
- bzoj千题计划304:bzoj3676: [Apio2014]回文串(回文自动机)
https://www.lydsy.com/JudgeOnline/problem.php?id=3676 回文自动机模板题 4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉 #include& ...
- bzoj千题计划292:bzoj2244: [SDOI2011]拦截导弹
http://www.lydsy.com/JudgeOnline/problem.php?id=2244 每枚导弹成功拦截的概率 = 包含它的最长上升子序列个数/最长上升子序列总个数 pre_len ...
- bzoj千题计划278:bzoj4590: [Shoi2015]自动刷题机
http://www.lydsy.com/JudgeOnline/problem.php?id=4590 二分 这么道水题 没long long WA了两发,没判-1WA了一发,二分写错WA了一发 最 ...
- bzoj千题计划250:bzoj3670: [Noi2014]动物园
http://www.lydsy.com/JudgeOnline/problem.php?id=3670 法一:KMP+st表 抽离nxt数组,构成一棵树 若nxt[i]=j,则i作为j的子节点 那么 ...
随机推荐
- Jenkins 构建运行java程序
我们将在Jenkins建立执行一个简单的 HelloWorld 应用程序,构建和运行Java程序.打开网址:http://localhost:8080/jenkins 第1步- 转到Jenkins 仪 ...
- 初学Direct X(7) ——位图的旋转,缩放以及平移
初学Direct X(7) --位图的旋转,缩放以及平移 本文旨在实现通过D3DXMatrixTransformation2D函数实现位图的旋转,缩放以及平移操作,但是具体的原理部分会在后面进一步的探 ...
- [文章存档]Azure上部署的java app在向第三方服务传送中文时出现乱码
https://docs.azure.cn/zh-cn/articles/azure-operations-guide/app-service-web/aog-app-service-web-java ...
- PAT甲题题解-1025. PAT Ranking (25)-排序
排序,求整体的排名和局部的排名整体排序,for循环一遍同时存储整体目前的排名和所在局部的排名即可 #include <iostream> #include <cstdio> # ...
- Actual Time Cost
- css实现table中td单元格鼠标悬浮时显示更多内容
table中,td单元格无法显示下全部内容,需要在鼠标hover时显示全部内容. 正常显示样式: 鼠标hover时: html: <td>displayAddress<span cl ...
- dos批量导入不受信任的证书及软件限制策略的应用
certmgr.exe -add "证书.cer" -s -r localMachine Disallowed 导入授信机构 certmgr -add "证书.cer&q ...
- 【版本管理】git远程管理
GitHub相关: 第1步:注册github账号,创建SSH Key. 在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件, ...
- 安装spring-tool-suite插件
spring-tool-suite是一个非常好用的spring插件,由于eclipse是一个很简洁的IDE,因此许多插件,需要我们自己去手动下载.而Spring-tool-suite插件即是其中之一. ...
- 【bzoj5118】Fib数列2 费马小定理+矩阵乘法
题目描述 Fib定义为Fib(0)=0,Fib(1)=1,对于n≥2,Fib(n)=Fib(n-1)+Fib(n-2) 现给出N,求Fib(2^n). 输入 本题有多组数据.第一行一个整数T,表示数据 ...