并不对劲的bzoj3214:p3333:[ZJOI2013]丽洁体
题目大意
有三个由若干个单词组成的字符串\(T,A,B,C(|T|,|A|,|B|,|C|\leq 5*10^4,单词长度\leq5,每个单词出现次数\leq500)\)
求从\(T\)中至少删去多少个单词,使\(T\)变成\(A*B*C\)的形式,其中\(*\)可以用若干个单词替换,输入数据保证有解
题解
发现删去若干个单词后,一个前缀变成了\(A\),一个后缀变成了\(C\),那么找到最短的有\(A\)为子序列的前缀和最短的有\(C\)为子序列的后缀就行
在剩下的部分中,找到最短的以\(B\)为子序列的子串
\(B\)中的第一个单词只出现了不超过\(500\)次,那么就可以先枚举起点,再用上面的方法贪心
时间复杂度\(\Theta(|T|*(B的第一个单词出现次数))\)
代码
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<iomanip>
#include<iostream>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#define rep(i,x,y) for(register int i=(x);i<=(y);++i)
#define dwn(i,x,y) for(register int i=(x);i>=(y);--i)
#define maxn 50001
#define maxm 501
#define LL long long
#define UI unsigned int
using namespace std;
int read()
{
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)&&ch!='-')ch=getchar();
if(ch=='-')f=-1,ch=getchar();
while(isdigit(ch))x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
return x*f;
}
void write(int x)
{
if(x==0){putchar('0'),putchar('\n');return;}
int f=0;char ch[20];
if(x<0)putchar('-'),x=-x;
while(x)ch[++f]=x%10+'0',x/=10;
while(f)putchar(ch[f--]);
putchar('\n');
return;
}
char s[10],c;
UI t[maxn],a[2][maxn],b[maxn];
int len,lent,lena[2],lenb,hd,tl,fakeans,ansb=2147483647;
UI hsh()
{
UI res=0,now=1;
rep(i,1,len){if(s[i]<'a'||s[i]>'z')break;res+=now*(UI)(s[i]-'a'+1),now=now*(UI)27;}
return res;
}
int getstr(UI * u)
{
int lenu=0;
do
{
len=0;c=getchar();
while(c==' '||c=='\n')c=getchar();
while(c!=' '&&c!='\n')s[++len]=c,c=getchar();
u[++lenu]=hsh();
}while(c!='\n');
return lenu;
}
int main()
{
lent=getstr(t),lena[0]=getstr(a[0]),lenb=getstr(b),lena[1]=getstr(a[1]);
int j=0;
rep(i,1,lent)
{
if(t[i]==a[0][j+1])j++;
if(j==lena[0]){hd=i+1;fakeans=i-j;break;}
}j=lena[1]+1;
dwn(i,lent,1)
{
if(t[i]==a[1][j-1])j--;
if(j==1){tl=i-1;fakeans+=lent-i+1-lena[1];break;}
}
rep(i,hd,tl)
if(t[i]==b[1])
{
int j=1;
rep(k,i+1,tl)
{
if(t[k]==b[j+1])j++;
if(j==lenb){ansb=min(ansb,k-i+1-j);break;}
}
}
write(fakeans+ansb);
return 0;
}
并不对劲的bzoj3214:p3333:[ZJOI2013]丽洁体的更多相关文章
- [luogu] P3333 [ZJOI2013]丽洁体(贪心)
P3333 [ZJOI2013]丽洁体 题目描述 平时的练习和考试中,我们经常会碰上这样的题:命题人给出一个例句,要我们类比着写句子.这种往往被称为仿写的题,不单单出现在小学生的考试中,也有时会出现在 ...
- [BZOJ3214][ZJOI2013]丽洁体(Hash+DP)
3214: [Zjoi2013]丽洁体 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 906 Solved: 335[Submit][Status] ...
- BZOJ3214 [Zjoi2013]丽洁体
题意 平时的练习和考试中,我们经常会碰上这样的题:命题人给出一个例句,要我们类比着写句子.这种往往被称为仿写的题,不单单出现在小学生的考试中,也有时会出现在中考中.许多同学都喜欢做这种题,因为较其它题 ...
- [ZJOI2013]丽洁体
题目描述 平时的练习和考试中,我们经常会碰上这样的题:命题人给出一个例句,要我们类比着写句子.这种往往被称为仿写的题,不单单出现在小学生的考试中,也有时会出现在中考中.许多同学都喜欢做这种题,因为较其 ...
- bzoj 3214: [Zjoi2013]丽洁体
Description 平时的练习和考试中,我们经常会碰上这样的题:命题人给出一个例句,要我们类比着写句子.这种往往被称为仿 写的题,不单单出现在小学生的考试中,也有时会出现在中考中.许多同学都喜欢做 ...
- 【BZOJ】3214: [Zjoi2013]丽洁体
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3214 字符串长度最大不超过$5$直接$HASH$起来 首先在$T$中考虑找到最前的一个包含 ...
- [ZJOI 2013]丽洁体
Description 题库链接 给出四个字符串 \(T,A,B,C\) ,问你至少在 \(T\) 串中删去几个单词能使得 \(T\) 串变为 \(A?B?C\) 的形式,其中 \(?\) 表示任意多 ...
- AHOI2018训练日程(3.10~4.12)
(总计:共90题) 3.10~3.16:17题 3.17~3.23:6题 3.24~3.30:17题 3.31~4.6:21题 4.7~4.12:29题 ZJOI&&FJOI(6题) ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
随机推荐
- xtu DP Training B. Collecting Bugs
B. Collecting Bugs Time Limit: 10000ms Memory Limit: 64000KB 64-bit integer IO format: %lld Jav ...
- Laya Tween循环
Laya Tween循环 @author ixenos 需求:做一个循环的缓动动画 方案: 1)如果只是线性变化,那么直接使用timer或者frameLoop来变化 2)如果需要有非线性变化,那么使用 ...
- 在C#代码中应用Log4Net系列教程(附源代码)地址
在博客园看到一篇关于Log4Net使用教程,比较详细,感谢这位热心的博主 博客园地址:http://www.cnblogs.com/kissazi2/archive/2013/10/29/339359 ...
- 手动扩大栈内存,让AC无忧
http://blog.csdn.net/shahdza/article/details/6586430 还在因为 怕 g++ 提交时间很慢,但是用C++ 交又怕栈溢出??? 我们都知道,如果代码里有 ...
- 为docker容器设置独立ip
docker 1.12使用新版macvlan设置与宿主机同网段ip ****************************************** 由于开发的一些特殊需求,需要将容器部署在与宿主 ...
- hdu 4043 FXTZ II [ 概率 + Java大数]
传送门 FXTZ II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- OpenWrt 安装python-sqlite3失败
https://dev.openwrt.org/ticket/12239 #12239 reopened defect Sqlite3 missing in python 汇报人: dgspai@- ...
- 【Nginx】定时器事件
转自:烟雨江南 Nginx事件管理主要是网络事件和定时器事件.下面介绍定时器事件管理,即超时管理. 为什么进行超时管理? Nginx有必要对可能发生超时的事件 进行统一管理,并在事件超时时作出相应的处 ...
- 【转】C++函数的重载、覆盖和隐藏区别
网上看到的关于C++函数的重载.覆盖和隐藏区别的回答,如下(其内容来源于C++面试宝典中一道题目): a.成员函数被重载的特征:(1)相同的范围(在同一个类中):(2)函数名字相同:(3)参数不同:( ...
- iOS中MRC和ARC混编
1. 在targets的build phases选项下Compile Sources下选择,不使用arc编译的文件.双击它.输入 -fno-objc-arc 就可以(这个类就能够使用MRC模式) 2. ...