折半爆搜,首先爆搜出所有长度不超过$4$的串。

对于每个询问,首先暴力枚举所有长度不超过$4$的串,以及前$4$位相同时后面的串。

然后枚举前$4$位,以及后面的串长,那么后面的hash值唯一,可以双指针求出。

时间复杂度$O(26^4(\log(26^4)+k))$。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. typedef long long ll;
  5. typedef unsigned int U;
  6. const int N=460000;
  7. const ll inf=1LL<<60;
  8. int seed,L,Q,ansl,sl;U H,mul[4];ll ans,ss,po[8];
  9. struct P{U h;int s;P(){}P(U _h,int _s){h=_h,s=_s;}};
  10. inline bool cmpa(const P&x,const P&y){return x.h<y.h;}
  11. inline bool cmpb(const P&x,const P&y){return x.h==y.h?x.s<y.s:x.h<y.h;}
  12. struct DS{
  13. int n;P a[N];
  14. void add(P t){a[++n]=t;}
  15. void inita(){std::sort(a+1,a+n+1,cmpa);}
  16. void initb(){
  17. std::sort(a+1,a+n+1,cmpb);
  18. int m=0;
  19. for(int i=1;i<=n;i++)if(i==1||a[i].h!=a[i-1].h)a[++m]=a[i];
  20. n=m;
  21. }
  22. }A[5],B[5],C[5];
  23. void dfs(int l,U h,int s){
  24. if(l)B[l].add(P(h,s)),C[l].add(P(h,s));
  25. if(l==4){
  26. for(int i=1;i<=4;i++)A[i].add(P(h*=seed,s));
  27. return;
  28. }
  29. for(int i=0;i<26;i++)dfs(l+1,h*seed+i+'A',s+po[3-l]*i);
  30. }
  31. inline void up(ll x,int y){
  32. if(x==ss&&y==sl)return;
  33. if(x>ans)return;
  34. if(x<ans||x==ans&&y<ansl)ans=x,ansl=y;
  35. }
  36. void solve(){
  37. char s[100];
  38. scanf("%s",s);
  39. int n=strlen(s),i,j,k;
  40. sl=n;
  41. for(i=H=ss=0;i<n;i++)H=H*seed+s[i],ss+=po[7-i]*(s[i]-'A');
  42. ans=inf;
  43. 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);
  44. if(sl>4&&sl<=L){
  45. U tmp=0;ll t=0;
  46. for(i=0;i<4;i++)tmp=tmp*seed+s[i],t+=po[7-i]*(s[i]-'A');
  47. tmp*=mul[sl-4];
  48. 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);
  49. }
  50. for(i=1;i<=4&&i+4<=L;i++){
  51. U o=~0U;
  52. for(j=1,k=B[i].n;j<=A[i].n;j++){
  53. U t=H-A[i].a[j].h;
  54. if(t>o)k=B[i].n;
  55. o=t;
  56. while(k&&B[i].a[k].h>t)k--;
  57. if(k&&B[i].a[k].h==t)up(1LL*po[4]*A[i].a[j].s+B[i].a[k].s,i+4);
  58. }
  59. }
  60. if(ans==inf)puts("-1");
  61. else{
  62. for(i=0;i<ansl;i++)putchar(ans/po[7-i]%26+'A');
  63. puts("");
  64. }
  65. }
  66. int main(){
  67. scanf("%d%d%d",&seed,&L,&Q);
  68. for(int i=mul[0]=1;i<4;i++)mul[i]=mul[i-1]*seed;
  69. for(int i=po[0]=1;i<8;i++)po[i]=po[i-1]*26;
  70. dfs(0,0,0);
  71. for(int i=1;i<=4;i++)A[i].inita(),B[i].initb();
  72. while(Q--)solve();
  73. return 0;
  74. }

  

BZOJ3752 : Hack的更多相关文章

  1. css常用hack

    原文地址:css常用hack 突然想起今天早上在CNZZ看到的统计数据,使用IE6.7的用户比例还真多,看到之后我的心都碎了.微软都放弃了为毛还有这么多人不死心? 所以说,IE下的兼容还是得做的. – ...

  2. CSS3_01之选择器、Hack

    1.兄弟选择器:①相邻兄弟选择器:元素的后一个兄弟元素,选择器1+选择器2:②通用兄弟选择器:元素后的所有兄弟元素,选择器1~选择器2: 2.属性选择器:attr表示属性名称,elem表示元素名:①[ ...

  3. CSS Hack技术介绍及常用的Hack技巧集锦

    一.什么是CSS Hack? 不同的浏览器对CSS的解析结果是不同的,因此会导致相同的CSS输出的页面效果不同,这就需要CSS Hack来解决浏览器局部的兼容性问题.而这个针对不同的浏览器写不同的CS ...

  4. Medial Queries的另一用法——实现IE hack

    众所周知,有些时候为了实现IE下的某些效果与现代浏览器一致,我们不得不使用一些hack手段来实现目的.比如说使用"\0","\"和"\9"来 ...

  5. CSS Hack

    CSS HACK,网上有很多,主要是IE版本不同造成的,尽量不要用CSS HACK,实在调不过去可以用一用,相信以后随着IE低版本的淘汰,CSS HACK也将不在使用. 类内部HACK IE6识别 - ...

  6. hack

    1.Firefox @-moz-document url-prefix() { .selector { property: value; } }上面是仅仅被Firefox浏览器识别的写法,具体如: @ ...

  7. 浅谈CSS hack(浏览器兼容)

    今天简单写一点关于浏览器兼容的处理方法,虽然百度上已经有很多,但是我还是要写! 先看一个图 这个图描述了2016年1月至8月网民们所使用的浏览器市场份额(来源:http://tongji.baidu. ...

  8. css3复杂选择器+内容生成+Css Hack

    1.复杂选择器2.内容生成3.多列4.CSS Hack(浏览器兼容性)=======================================1.复杂选择器 1.兄弟选择器 1.特点: 1.通过 ...

  9. dedecms功能性函数封装(XSS过滤、编码、浏览器XSS hack、字符操作函数)

    dedecms虽然有诸多漏洞,但不可否认确实是一个很不错的内容管理系统(cms),其他也不乏很多功能实用性的函数,以下就部分列举,持续更新,不作过多说明.使用时需部分修改,你懂的 1.XSS过滤. f ...

随机推荐

  1. python中的IO多路复用

    在python的网络编程里,socetserver是个重要的内置模块,其在内部其实就是利用了I/O多路复用.多线程和多进程技术,实现了并发通信.与多进程和多线程相比,I/O多路复用的系统开销小,系统不 ...

  2. echarts统计图使用

    网址:http://echarts.baidu.com  提示:不需要导入Jquery.js 使用: 1.导入js,echarts.js 2.创建容器 <!-- 为ECharts准备一个具备大小 ...

  3. js 时间相关函数

    实例: <!doctype html> <html> <head> <meta charset="utf-8"> <title ...

  4. GridView 动态添加绑定列和模板列

    动态添加绑定列很简单:例如: GridView1.DataSourceID = "SqlDataSource1"; BoundField bf1 = new BoundField( ...

  5. undefined method `environment' for nil:NilClass when importing Bootstrap into rails

    今天做项目时往Gemfile里加了各gem, 然后bundle update了一下, 然后悲剧了,出现了undefined method `environment' for nil:NilClass ...

  6. 第3月第8天 RefCounted PlistBuddy

    1.RefCounted引用计数 class Frame : public RefCounted<Frame> { // ... } http://www.cnblogs.com/dsky ...

  7. poj 1192

    此题亦一眼看出算法,一次AC. 没什么好讲的,就是一个普通的树形动规. 用dp[n][0]表示n号顶点不取时的最大值,dp[n][1]表示n号顶点取时的最大值. dp[n][0]=max{dp[x][ ...

  8. BZOJ 4576: [Usaco2016 Open]262144

    Description 一个序列,每次可以将两个相同的数合成一个数,价值+1,求最后最大价值 \(n \leqslant 262144\) Sol DP. 这道题是 BZOJ 4580: [Usaco ...

  9. dex文件格式二

    一. dex文件头 (1) magic value 在DexFile.c   dexFileParse函数中 会先检查magic opt 啥是magic opt呢? 我们刚刚从cache目录拷贝出来的 ...

  10. Odd Even Linked List

    Given a singly linked list, group all odd nodes together followed by the even nodes. Please note her ...