妮可妮可妮

题目描述

小P特别喜欢动画Love Live中的角色妮可,每当他听到妮可说“niconiconi”时,他总会感到特别兴奋,还会露出绅士般的微笑。
作为一名理论计算机科学家,小P开始研究“niconiconi”这种串的特点。他发现,“niconiconi”可以拆成“ni”、“co”、“ni”、“co”、“ni”这五部分。
对这个模型进行了抽象后,小P发现,任何形如ABABA的串都有类似的特点,其中A、B为非空串,我们称这样的串满足性质P。比如“aaaaa”就满足性质P,而“ababab”却不满足性质P。
有了这个革命性的发现,结合他最近新学的数据结构“后缀树”,小P决定造一道题。这道题是这样的,小P给你一个仅由小写英文字母组成的串S,你拿到这个串之后,小P会问你q个问题,每个问题形如“S的后缀p是不是满足性质P的串呀”。
注:设S的长度为n,那么S[1..n]的后缀p就是子串S[p..n]。

输入

第一行一个仅由小写英文字母组成的串S。
第二行一个整数q。
接下来q行,每行一个数p_i,表示第i次的问题是:“S的后缀p_i是不是满足性质P的串呀”。

输出

输出文件一共q行,第i行为对第i个问题的回答。
如果满足性质P,回答:“niconiconi”。(不包含引号)
如果不满足性质P,回答:“no”。(不包含引号)

样例输入

niconiconi
1
1

样例输出

niconiconi

提示

样例输入2
orzorzorz
3
1
7
2
样例输出2
no
no
niconiconi

测试点1..3:\(|S|≤100\)
测试点1..6:\(|S|≤1000\)
测试点1..10:\(1≤|S|≤5*10^5,1≤q≤10^5\)

题解

我么发现一个字符串若满足性质P,则必然可以分成[A][BA][BA]这三部分

而后面BA可以看成一个部分,也就是求一个字串,满足ACC,其中A是C的后缀

所以对于\(60\)%的数据,我们可以\(O(n^2)\)枚举C的长度,再判断A的长度最长可以是多长,设ans[i]表示后缀i是否满足性质P,那么我们每次枚举一个C,都可以得到一段区间内ans[]都等于1

那么怎么优化呢?我们可以发现枚举C之后,A的长度是具有单调性的,因此我们可以二分一个A的长度,这样时间复杂度就优化到了\(O(n*logn)\)

利用差分的思想统计哪些区间的前缀满足性质P

这些都是预处理,最后查询的时候就是\(O(1)\)查询

Code

#include<bits/stdc++.h>using namespace std;
typedef unsigned long long lol;
const int N=5*1e5+10,base=31;lol Hash[N],sum[N],tq,aq[N];
int m,x,ans[N];
char s[N];inline lol get(int l,int r)
{return Hash[r]-Hash[l-1]*sum[r-l+1];
}int main()
{//freopen("nico.in","r",stdin);//freopen("nico.out","w",stdout);scanf("%s%d",s+1,&m);int n=strlen(s+1); sum[0]=1;for(int i=1;i<=n;i++) Hash[i]=(Hash[i-1]*base+s[i]-'a'+1),sum[i]=sum[i-1]*base;for(int i=1;i<=n;i++) {if(get(n-i+1,n)!=get(n-2*i+1,n-i)) continue;lol mid,l=1,r=i-1;while(l<r) {mid=l+r+1>>1;if(get(n-mid+1,n)!=get(n-2*i-mid+1,n-2*i)) r=mid-1;else l=mid;}++aq[n-2*i-l+1],--aq[n-2*i+1];}for(int i=1;i<=n;i++) tq+=aq[i],ans[i]=(tq>0);for(int i=1;i<=m;i++) {scanf("%d",&x);puts(ans[x]?"niconiconi":"no");}
}

博主蒟蒻,随意转载.但必须附上原文链接

http://www.cnblogs.com/real-l/

转载于:https://www.cnblogs.com/real-l/p/9539056.html

妮可妮可妮 [Hash]相关推荐

  1. 你玩的音游可能真是AI生成的,Love Live!工作室发了篇论文,用AI节省50%作谱时间...

    萧箫 发自 凹非寺 量子位 | 公众号 QbitAI 现在,你打的音游曲谱,还真有可能是AI生成的! 像下面这些根据节拍生成音符的操作,也就是谱面 (chart),现在AI也能搞出来了: 这是发生在著 ...

  2. Scrum中文网解析敏捷实践编年史

    文章转自:Scrum中文网 敏捷实践编年史(敏捷联盟版)记录了上世纪六十年代至今敏捷相关实践的发展史,其英文原版材料来自于国际敏捷联盟网站(AgileAlliance.org) . 原文链接: htt ...

  3. ACP敏捷1.单团队单迭代.产品管理视角

    PMI-ACP_-- 敏捷项目 管理国际资格认证(Agile Certified Practitioner), 聚焦项目管理思路,没有方法偏见(包含Scrum/看板/精益/XP等多种敏捷方法)充分践行 ...

  4. windows7经典开机音乐_Netflix将制作音乐剧舞会电影版,梅姨妮可詹胖确定参演

     简讯  6月25日,DEADLINE发布消息: 导演瑞恩·墨菲(Ryan Murphy)将执导百老汇音乐剧<舞会>(The Prom)的电影版. <舞会>在不久前结束的第73 ...

  5. 大一上计算机大作业个人小结:游戏《妮可迷惑日常》,DirectX,WinAPI实战

    前言 历时一个月,终于完成了人生中第一个游戏&计算机大作业<妮可迷惑日常>.首先自然是鸣谢一下两位合作大佬的帮助和包容. 关于游戏 这是一款基于DirectX中的DirectDra ...

  6. Redis 笔记(05)— hash 类型(设置获取单个hash值、判断hash键是否存在、设置获取多个hash值、获取所有hash的键、获取所有hash的值、删除hash指定键)

    Redis 的字典是无序字典.Redis 的字典的值只能是字符串,当 hash 移除了最后一个元素之后,该数据结构自动被删除,内存被回收. hash 结构也可以用来存储用户信息,不同于字符串一次性需要 ...

  7. java中hashcode_浅谈Java中的Hash值

    1.Hash值有什么用? HashMap.HashTable.HashSet,所以涉及到使用Hash值进行优化存储的地方,都会用到HashCode.HashCode是Key,这种计算为提高计算的性能. ...

  8. poj2002 hash+数学

    1 .求不同的四个点组成最大正方形的总个数: 2.由(x1,y1),(x2,y2),可以求出另外两点的坐标: 即 x3=x1+(y1-y2);y3=y1-(x1-x2); x4=x2+(y1-y2); ...

  9. 从头到尾彻底解析Hash表算法

    从头到尾彻底解析Hash表算法 发布时间: 2013-10-02 10:26  阅读: 25156 次  推荐: 14   原文链接   [收藏]   作者:July.wuliming.pkuoliv ...

  10. oracle 分区使用情况,Oracle Hash分区的使用总结

    近期项目需要用到分区表,但是分区键值有无法确定,因此只能使用hash分区(range.list分区以前常用,比hash分区简单),查询了文档,发现上面说的和实际使用时有点差距,就专门做实验验证下. 官 ...

最新文章

  1. Laravel核心代码学习 -- Facades
  2. 集合框架知识系列05 HashMap的源码分析和使用示例
  3. 2.1 帮助命令、用户管理、压缩
  4. jdk动态代理源码分析(一)---代理的定义
  5. realtek网卡mac硬改工具_七彩虹联合Realtek发布粉色固态硬盘 首发评测
  6. BAT变TAT?2019年互联网各梯队排名重组
  7. .NET 3.5 Socket APM
  8. mapxtreme java_MapXtreme Java Edition 4.8使用心得(二)
  9. 电感式传感器工作原理与电感式传感器应用案例-博扬智能
  10. 【安全资讯】引爆点:过去2020年勒索软件攻击激增62%
  11. 基于zk4500的指纹识别C#实现
  12. USB TO I2C(上海同旺电子)调试器调试LM75A--TI
  13. udp:远程主机强迫关闭了一个现有的连接
  14. Q4财报发布,腾讯音乐高质量增长背后的创新进化论
  15. 宅家神器—epub阅读器
  16. access随系统启动的宏_Access 中启动带宏的excel
  17. 作为通信人,我们究竟该如何看待AI?
  18. 关于精简安装office2010的步骤
  19. 王半仙儿的日记-0007
  20. 安装小觅相机(1030)驱动以及如何将Ubuntu18.04的内核降到4.15.0版本

热门文章

  1. 撂荒耕地变“希望良田” 国稻种芯:平远县热柘镇以企带村
  2. fabric 中 peer 和 couch 容器中网络和数据存放目录地址
  3. 一个屌丝程序猿的人生(四十三)
  4. 最值得看的文章之一:林锐《大学十年》
  5. Crime HDU - 4623(状压DP,不同进制转换)
  6. 自动驾驶技术基础——惯导
  7. CSDN_MySQL入门技能树学习整理知识点
  8. 关于python数据的纬度_Python插值时间,纬度和经度
  9. 设计模式-建造者模式(5)
  10. 【redux------状态管理库】