BZOJ3752 : Hack
折半爆搜,首先爆搜出所有长度不超过$4$的串。
对于每个询问,首先暴力枚举所有长度不超过$4$的串,以及前$4$位相同时后面的串。
然后枚举前$4$位,以及后面的串长,那么后面的hash值唯一,可以双指针求出。
时间复杂度$O(26^4(\log(26^4)+k))$。
#include<cstdio>
#include<cstring>
#include<algorithm>
typedef long long ll;
typedef unsigned int U;
const int N=460000;
const ll inf=1LL<<60;
int seed,L,Q,ansl,sl;U H,mul[4];ll ans,ss,po[8];
struct P{U h;int s;P(){}P(U _h,int _s){h=_h,s=_s;}};
inline bool cmpa(const P&x,const P&y){return x.h<y.h;}
inline bool cmpb(const P&x,const P&y){return x.h==y.h?x.s<y.s:x.h<y.h;}
struct DS{
int n;P a[N];
void add(P t){a[++n]=t;}
void inita(){std::sort(a+1,a+n+1,cmpa);}
void initb(){
std::sort(a+1,a+n+1,cmpb);
int m=0;
for(int i=1;i<=n;i++)if(i==1||a[i].h!=a[i-1].h)a[++m]=a[i];
n=m;
}
}A[5],B[5],C[5];
void dfs(int l,U h,int s){
if(l)B[l].add(P(h,s)),C[l].add(P(h,s));
if(l==4){
for(int i=1;i<=4;i++)A[i].add(P(h*=seed,s));
return;
}
for(int i=0;i<26;i++)dfs(l+1,h*seed+i+'A',s+po[3-l]*i);
}
inline void up(ll x,int y){
if(x==ss&&y==sl)return;
if(x>ans)return;
if(x<ans||x==ans&&y<ansl)ans=x,ansl=y;
}
void solve(){
char s[100];
scanf("%s",s);
int n=strlen(s),i,j,k;
sl=n;
for(i=H=ss=0;i<n;i++)H=H*seed+s[i],ss+=po[7-i]*(s[i]-'A');
ans=inf;
for(i=1;i<=4&&i<=L;i++)for(j=1;j<=C[i].n;j++)if(C[i].a[j].h==H)up(1LL*po[4]*C[i].a[j].s,i);
if(sl>4&&sl<=L){
U tmp=0;ll t=0;
for(i=0;i<4;i++)tmp=tmp*seed+s[i],t+=po[7-i]*(s[i]-'A');
tmp*=mul[sl-4];
for(j=1;j<=C[sl-4].n;j++)if(tmp+C[sl-4].a[j].h==H)up(t+C[sl-4].a[j].s,sl);
}
for(i=1;i<=4&&i+4<=L;i++){
U o=~0U;
for(j=1,k=B[i].n;j<=A[i].n;j++){
U t=H-A[i].a[j].h;
if(t>o)k=B[i].n;
o=t;
while(k&&B[i].a[k].h>t)k--;
if(k&&B[i].a[k].h==t)up(1LL*po[4]*A[i].a[j].s+B[i].a[k].s,i+4);
}
}
if(ans==inf)puts("-1");
else{
for(i=0;i<ansl;i++)putchar(ans/po[7-i]%26+'A');
puts("");
}
}
int main(){
scanf("%d%d%d",&seed,&L,&Q);
for(int i=mul[0]=1;i<4;i++)mul[i]=mul[i-1]*seed;
for(int i=po[0]=1;i<8;i++)po[i]=po[i-1]*26;
dfs(0,0,0);
for(int i=1;i<=4;i++)A[i].inita(),B[i].initb();
while(Q--)solve();
return 0;
}
BZOJ3752 : Hack的更多相关文章
- css常用hack
原文地址:css常用hack 突然想起今天早上在CNZZ看到的统计数据,使用IE6.7的用户比例还真多,看到之后我的心都碎了.微软都放弃了为毛还有这么多人不死心? 所以说,IE下的兼容还是得做的. – ...
- CSS3_01之选择器、Hack
1.兄弟选择器:①相邻兄弟选择器:元素的后一个兄弟元素,选择器1+选择器2:②通用兄弟选择器:元素后的所有兄弟元素,选择器1~选择器2: 2.属性选择器:attr表示属性名称,elem表示元素名:①[ ...
- CSS Hack技术介绍及常用的Hack技巧集锦
一.什么是CSS Hack? 不同的浏览器对CSS的解析结果是不同的,因此会导致相同的CSS输出的页面效果不同,这就需要CSS Hack来解决浏览器局部的兼容性问题.而这个针对不同的浏览器写不同的CS ...
- Medial Queries的另一用法——实现IE hack
众所周知,有些时候为了实现IE下的某些效果与现代浏览器一致,我们不得不使用一些hack手段来实现目的.比如说使用"\0","\"和"\9"来 ...
- CSS Hack
CSS HACK,网上有很多,主要是IE版本不同造成的,尽量不要用CSS HACK,实在调不过去可以用一用,相信以后随着IE低版本的淘汰,CSS HACK也将不在使用. 类内部HACK IE6识别 - ...
- hack
1.Firefox @-moz-document url-prefix() { .selector { property: value; } }上面是仅仅被Firefox浏览器识别的写法,具体如: @ ...
- 浅谈CSS hack(浏览器兼容)
今天简单写一点关于浏览器兼容的处理方法,虽然百度上已经有很多,但是我还是要写! 先看一个图 这个图描述了2016年1月至8月网民们所使用的浏览器市场份额(来源:http://tongji.baidu. ...
- css3复杂选择器+内容生成+Css Hack
1.复杂选择器2.内容生成3.多列4.CSS Hack(浏览器兼容性)=======================================1.复杂选择器 1.兄弟选择器 1.特点: 1.通过 ...
- dedecms功能性函数封装(XSS过滤、编码、浏览器XSS hack、字符操作函数)
dedecms虽然有诸多漏洞,但不可否认确实是一个很不错的内容管理系统(cms),其他也不乏很多功能实用性的函数,以下就部分列举,持续更新,不作过多说明.使用时需部分修改,你懂的 1.XSS过滤. f ...
随机推荐
- .NET简谈事务、分布式事务处理
http://www.cnblogs.com/wangiqngpei557/archive/2011/12/22/2298500.html
- QT读取文本(字符串)最后一行的方法
QString str; QTextStream ts(&str); str = this->toPlainText(); ts.seek(str.lastIndexOf("- ...
- 2015.4.23 贪吃蛇、canvas动画,各种上传工具,url信息匹配以及最全前端面试题等
1.面向对象贪吃蛇 2.css中:hover 改变图片 页面加载完 第一次鼠标移入会闪一下 这是为啥? 解决方法:你把两张图合成一张图或者是先把图片加载到页面上,然后再hover出来. 解析:图片 ...
- log4j的使用详细解析
1 Log4j配置说明 1.1 配置文件Log4j可以通过java程序动态设置,该方式明显缺点是:如果需要修改日志输出级别等信息,则必须修改java文件,然后重新编译,很是麻烦: log4j也可以通过 ...
- bzoj1491 社交网络
Description 在社交网络(socialnetwork)的研究中,我们常常使用图论概念去解释一些社会现象.不妨看这样的一个问题. 在一个社交圈子里有n个人,人与人之间有不同程度的关系.我们将这 ...
- 【Alpha版本】 第一天 11.7
一.站立式会议照片: 二.项目燃尽图: 三.项目进展: 成 员 前段时间完成任务 今天完成任务 明天要做任务 问题困难 心得体会 胡泽善 部分APP功能 我要招聘详情的展示 注册界面的实现 一些特殊效 ...
- poj 1239
二次dp,还算好想. 先第一遍dp找出最后一个数字最小是几. dpf[i]=max{j}+1(dpf[j],dpf[j]+1,…,j位组成的数字小于j+1,j+2,…,i位组成的数字. 在第二遍dp, ...
- SQL语句 分页实现
1 通过sql实现分页. select top 5 * from judgeorder where id not in (select top 10 id from judgeorder order ...
- 听说你们要开始学C了
同学们好: 先自我介绍一下,我是你们的助教吴喆(厚颜无耻地要求大家叫我吉吉老师:-D),本科学的电子,所以陆陆续续接触了不少C/C++的工作,曾经被编码折磨得死去活来,如今却对其念念不舍,颇有点“斯德 ...
- jquery-常用的运行函数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...