正睿OI 提高 Day1T3 ZYB玩字符串(DP)
设可能的答案串为p,长为len。p一定是s的一个子串且len|n。
虽然一些p在s中可能被断成若干段,但删掉其中的若干段后,这段区间一定会被全部消掉。
于是枚举p后,可以用f[i][j]表示区间[i,j]是否合法。len不需要整除区间长度,多余的部分要匹配p的前缀(匹配什么后缀啊,大不了从前面开始)。
f[i][j]可以由j-1拼,即 \(f[i][j]|=f[i][j-1]\ \&\&\ s[j]==p[(l-1)/l+1] (l=j-i+1)\)。
也可以是j和前面构成了可消除的串,之后可以跳过这些串继续匹配,即 \(f[i][j]|=f[i][j-k*len]\ \&\&\ f[j-k*len+1][j]\)。
第二种转移的上界是\(O(\frac{n}{len})\)的。
复杂度约是\(O(\sum_{len|n}(n-len+1)*n^2*n/len)=O(n^4)\)。对p判一下重,再判字符集合法性,跑的就很快了。
//285ms 17216kb(string怎么那么快。。)
#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
#define gc() getchar()
#define mod (20000000)
const int N=205;
int n,q[N*N],cnt[233],cnt2[233];
bool vis[20000001],f[N][N];
char s[N],p[N],ans[N];
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
inline int Hash(int l)
{
int x=0;
for(int i=1; i<=l; ++i) x=(x*37+p[i]-'A')%mod;
return x;
}
void Update()
{
if(ans[1]=='{') for(int i=1; i<=n; ++i) ans[i]=p[i];
else
{
for(int i=1; i<=n; ++i) if(p[i]>ans[i]) return;
for(int i=1; i<=n; ++i) ans[i]=p[i];
}
}
bool Solve(int len)
{
for(int i=1; i<=n; ++i) f[i][i]=s[i]==p[1];
for(int l=2; l<=n; ++l)
{
for(int i=1,j; (j=i+l-1)<=n; ++i)
{
f[i][j]=0;
if(f[i][j-1]&&s[j]==p[(l-1)%len+1]) f[i][j]=1;
else
for(int k=1; j>=i+k*len; ++k)
if(f[i][j-k*len]&&f[j-k*len+1][j]) {f[i][j]=1; break;}
}
}
return f[1][n];
}
int main()
{
for(int T=read(); T--; )
{
ans[1]='{'; int t=0;
scanf("%s",s+1), n=strlen(s+1);// cin>>s; s=""+s;
for(int i=1; i<=n; ++i) ++cnt[s[i]];
for(int len=1; len<=n; ++len)
if(!(n%len))
{
for(int l=0,val; l+len<=n; ++l)
{
for(int i=1; i<=len; ++i) p[i]=s[l+i];// p=s.substr(l+1,l+len)
for(int i=1; i<=len; ++i) ++cnt2[p[i]];
bool f=1;
for(int i='a'; i<='z'; ++i) if(cnt2[i]&&cnt[i]%cnt2[i]) {f=0; break;}//cnt2!=0。。
for(int i=1; i<=len; ++i) --cnt2[p[i]];
if(!f) continue;
if(!vis[val=Hash(len)]) vis[val]=1, q[++t]=val;
else continue;
if(Solve(len)) Update();
}
if(ans[1]!='{') {ans[len+1]='\0', puts(ans+1); break;}
}
for(int i=1; i<=t; ++i) vis[q[i]]=0;
for(int i=1; i<=n; ++i) --cnt[s[i]];
}
return 0;
}
正睿OI 提高 Day1T3 ZYB玩字符串(DP)的更多相关文章
- 正睿OI提高组十连测 day1 总结
可能是最简单的一场比赛了吧,结果却打得这么差... T1是个找规律题,结果一开始愚蠢地找错了规律,然后又对拍,到1h多一点才过掉 然后看t2和t3,以为t2是个水题,t3也只要处理一下就好了,先写t2 ...
- 正睿OI DAY3 杂题选讲
正睿OI DAY3 杂题选讲 CodeChef MSTONES n个点,可以构造7条直线使得每个点都在直线上,找到一条直线使得上面的点最多 随机化算法,check到答案的概率为\(1/49\) \(n ...
- 正睿OI国庆DAY2:图论专题
正睿OI国庆DAY2:图论专题 dfs/例题 判断无向图之间是否存在至少三条点不相交的简单路径 一个想法是最大流(后来说可以做,但是是多项式时间做法 旁边GavinZheng神仙在谈最小生成树 陈主力 ...
- 正睿OI国庆day1
正睿OI国庆day1 T1 \[ S_n=1*S_{n-1}+1*F_{n-1}+1*F_{n-2}+1*f_{n-1}+1*f_{n-2} \] \[ F_{n}=0*S_{n-1}+1*F_{n- ...
- 正睿OI集训游记
什么嘛....就是去被虐的... 反正就是难受就是了.各种神仙知识点,神仙题目,各式各样的仙人掌..... 但是还是学会了不少东西...... 应该是OI生涯最后一次集训了吧.... 这次的感言还是好 ...
- 『正睿OI 2019SC Day8-Day17』
于是就迎来\(10\)天的自闭考试了,每天写点小总结吧. Day8 第一天就很自闭啊,考题分别是数学题+建模题+图论. 前两道题都没有什么算法,但是难度还是有的,于是就做不太出来,特别是第一题.第二题 ...
- [JZOJ6347]:ZYB玩字符串(DP+记忆化搜索)
题目描述 $ZYB$获得了一个神秘的非空字符串$p$. 初始时,串$S$是空的. $ZYB$会执行若干次这样的操作: $1.$选取$S$中的一个任意的位置(可以是最前面或者最后面) $2.$在这个位置 ...
- [JZOJ6347] 【NOIP2019模拟2019.9.8】ZYB玩字符串
题目 题目大意 有一个字符串\(p\).一开始字符串\(s\)为空串. 接下来进行若干次操作:在\(s\)的某个空隙中插入\(p\). 给出操作后的\(s\),问长度最小的\(p\). 思考历程 感觉 ...
- 【正睿oi省选十连测】第一场
四小时写了两个暴力??自闭 [原来这就是神仙们的分量Orz rank 56/75 可以说是无比垃圾了 下周目标:进步十名?[大雾 T1 题意:有n个点的图 点有点权Ai 也有点权Bi = A_1 + ...
随机推荐
- python常用模块-配置文档模块(configparser)
python常用模块-配置文档模块(configparser) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. ConfigParser模块用于生成和修改常见配置文档,当前模块的名称 ...
- ASP.NET MVC学习(三)之过滤器Filter
http://www.cnblogs.com/yaopengfei/p/7910763.html
- Linux 静态库与动态库
静态库(.a) 一个deal.c usedeal.c 重点 1. gcc -c deal.c 生成 deal.o 2. ar -rsv libdeal.a deal.o 生成 libdeal.a ...
- [游戏数据分析]WAU模型简介及WAU预测
声明:本博客中所采用的数据并非真实数据,会对真实数据加以变换,重在讨论游戏数据分析的思路. 这里是参考友盟的WAU模型[文章网址, 演示网址],利用某款游戏(以下称为游戏A)数据进行的分析. 作用: ...
- Linux释放内存小脚本
最近发现渣渣ECS内存总是不够用,内存太小一不小心就用完了,用完就用完吧,内存用来做cache是可以快一些,但是内存用完了老是一顿一顿的卡,实在有点受不了,于是就写了释放内存的小脚本,觉得卡了就释放下 ...
- 【Python】Flask系列-URL和视图笔记
1.学习目标 熟悉Flask相关知识. 熟悉web开发流程. 能独立开发Flask项目. 2.环境配置 Python虚拟环境安装 因为python的框架更新迭代太快了,有时候需要在电脑上存在一个框架的 ...
- 【Python】HackBack(获取暴力破解服务器密码的IP来源)
1.前言 又在0x00sec上翻到好东东. https://0x00sec.org/t/python-hackback-updated/882 帖子里的脚本会得到那些暴力服务器密码失败的IP和用户名, ...
- mysql学习------二进制日志管理
MySQL二进制日志(Binary Log) a.它包含的内容及作用如下: 包含了所有更新了数据或者已经潜在更新了数据(比如没有匹配任何行的一个DELETE) 包含关于每个更新数据库( ...
- IIS部署常见问题总结
1.通过网站子目录访问后台管理 场景:前台和后台分为两个项目开发,域名只有一个(t.cn),作为前台的地址,后台的地址希望指定为 t.cn/admin 项目部署的时候,需要把后台项目转化为/admin ...
- SpringBoot 构建RestFul API 含单元测试
相关博文: 从消费者角度评估RestFul的意义 SpringBoot 构建RestFul API 含单元测试 首先,回顾并详细说明一下在快速入门中使用的 @Controller . @RestC ...