题意

给你一个长度为n*k的环,环上每一个位置有一个字符。
现在给你g个长度为k的字符串,问是否可以在g个字符串中找出k个构成这个环。

思路

有0到k枚举,然后双hash就可以。

#include <iostream>
#include <map>
#include <cstring>
#include <vector>using namespace std;
const int MAXN=3e6+10;
char str1[MAXN],str2[MAXN];
const int seed=13331;
const int mod1=1000000007;
const int mod2 = 19260817;
typedef long long ll;
typedef pair<ll,ll> pll;ll xp[2][MAXN],hash_1[2][MAXN],hash_2[2][MAXN];
pll temp[MAXN];
int ans[MAXN];void init()
{xp[0][0]=1;for(int i=1;i<MAXN;i++)xp[0][i]=(xp[0][i-1]*13331)%mod1;xp[1][0]=1;for(int i=1;i<MAXN;i++)xp[1][i]=(xp[1][i-1]*1331)%mod2;
}pll get_hash(int i,int l,ll hash[][MAXN])
{ll a=((hash[0][i]-hash[0][i+l]*xp[0][l])%mod1+mod1)%mod1;ll b=((hash[1][i]-hash[1][i+l]*xp[1][l])%mod2+mod2)%mod2;return pll(a,b);
}pll make_hash(char str[],ll hash[][MAXN])
{int len=strlen(str);hash[0][len]=0;hash[1][len]=0;for(int i=len-1;i>=0;i--){hash[0][i]=(hash[0][i+1]*13331%mod1+str[i]-'a'+1)%mod1;hash[1][i]=(hash[1][i+1]*1331%mod2+str[i]-'a'+1)%mod2;}return get_hash(0,len,hash);
}map<pll,int> mp;
map<pll,vector<int>> mp2;int main()
{int n,k;init();scanf("%d%d",&n,&k);scanf("%s",str1);int len=n*k;for(int i=len;i<len+len;i++)str1[i]=str1[i-len];make_hash(str1,hash_1);int g;scanf("%d",&g);for(int i=0;i<g;i++){scanf("%s",str2);pll t1=make_hash(str2,hash_2);mp2[t1].push_back(i+1);mp[t1]++;}for(int i=0;i<k;i++){int fg=1;int cont=0;int cont1=0;for(int j=i;j<=i+len-k;j+=k){pll t2=get_hash(j,k,hash_1);if(!mp[t2]){fg=0;break;}else    {temp[cont++]=t2;mp[t2]--;ans[cont1++]=mp2[t2].back();mp2[t2].pop_back();   }}if(fg){printf("YES\n");for(int j=0;j<cont1;j++)if(!j) printf("%d",ans[j]);else printf(" %d",ans[j]);return 0;}else{for(int j=0;j<cont;j++){mp[temp[j]]++; mp2[temp[j]].push_back(ans[j]);}}}printf("NO\n");return 0;
}

Games on a CD CodeForces - 727E(双hash)相关推荐

  1. codeforces E. Games on a CD(双hash)

    问题:n个长度为k的字符串组成的环形字符串S,以及g个长度为k的字符串,问是否可以组成此环形字符串. 思路:因为是环形字符串,在处理字符串时,需要加上S的前k个字符.先计算所有的前缀散列值,以及对应的 ...

  2. CodeForces - 727E Games on a CD 字符串Hash

    题意:有n个单词,每个单词长度为k,顺时针将它们写成一个圆圈串.现在知道g个长度为k的单词,是否可以从这g个单词中选择n个形成这个圆圈串?如果有多个答案,任意输出一个. 思路 可以发现,如果枚举第一个 ...

  3. codeforces 727E. Games on a CD

    题目链接:http://codeforces.com/contest/727/problem/E 题目大意:有g个长度为k的互不相同的字符串,从中选择n个按照顺时针顺序写下形成一个环s.给出s(长度为 ...

  4. 【题解】Codeforces 727E. Games on a CD AC自动机

    给定n,k(1e5,n∗k≤1e6)n,k(1e5,n*k\le 1e6)n,k(1e5,n∗k≤1e6),给定一个长为n∗kn*kn∗k的环形字符串,已知它由nnn个长为kkk的互不相同字符串相接而 ...

  5. CF727E. Games on a CD (Hash)

    题目链接:https://acm.njupt.edu.cn/problem/CF727E 题意:题目我看了好久才看懂,意思是将输入的第二行的字符串围成一个圆(首尾相连),可以从圆的任意位置剪开让它成为 ...

  6. codeforces Palindromic characteristics(hash或者dp)

    1.动态规划 用dp(l,r)表示子串s[l..r]的回文串阶数.对于长度len为1的有dp(l,r)=1.对于长度len等于2的,看字符串左右是否相等即可.当r-l>1时,如果s[l]不等于s ...

  7. 【CodeForces727E/CF727E】Games on a CD (字符串哈希)

    题目: CodeForces727E 分析: 看到字符串比较,肯定想到哈希啊--现学的哈希,先丢两个重要的公式 (seedseedseed是大于字符集大小的质数,ppp是大质数) hash[i]=(h ...

  8. bzoj 2803: [Poi2012]Prefixuffix(双Hash)

    2803: [Poi2012]Prefixuffix Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 413  Solved: 167 [Submit] ...

  9. Educational Codeforces Round 44 (Rated for Div. 2)

    题目链接:https://codeforces.com/contest/985 'A.Chess Placing 题意:给了一维的一个棋盘,共有n(n必为偶数)个格子.棋盘上是黑白相间的.现在棋盘上有 ...

最新文章

  1. [已解决] InnoDB: preallocating bytes for file ./ibdata1 failed with error
  2. [LOJ#6068]. 「2017 山东一轮集训 Day4」棋盘[费用流]
  3. 【LiveVideoStack采访】李备:音视频技术的难点与未来
  4. Linux系统编程——线程池
  5. 【Python 必会技巧】copy 模块中 copy() 与 deepcopy() 函数的区别
  6. 已经没有再谈话再培养的飞秋必要了
  7. .net安全编程 阅读笔记(二)
  8. 经典10046剖析案例-2
  9. 什么是PV UV PR值
  10. ZeroMQ 的模式
  11. 9行自定义函数教你用Python发送电子邮件!
  12. 浅谈Redis基本数据类型底层编码(含C源码)
  13. C语言科学计数法介绍和示例
  14. Android 实现欢迎界面
  15. MATLAB如何输出图形到CAD或者UG,ug里面怎么导出cad图形
  16. 如何在FPS游戏中快速实现简单的人体定位算法
  17. vbs和java有关系吗_Java程序员所需的批处理和VBS脚本 (转载)
  18. 【模式匹配】之 —— Sunday算法
  19. 编译原理 SysY语言的词法分析程序
  20. android TeleComm Telephony Dialer之间的说明

热门文章

  1. 网上商城系统mysql_网上商城系统jsp+servlet+mysql130909
  2. android室内定位传感器辅助pdr jar,基于PDR辅助的视觉室内定位算法的研究
  3. 基于python的火车票售票系统/基于django火车票务网站/火车购票系统
  4. UML类图属性和相关关系
  5. ubuntu electron-rebuild 我的成功方法
  6. HTTP1.1协议-RFC2616-中文版
  7. 仔细体验,我想从产品设计的角度分析分析微信的声音锁
  8. 宠爱吖用计算机怎么弹,宠爱吖简谱-歌谱-歌词
  9. Python 从入门到爬虫极简教程
  10. python中的命令,python学习——python中命令行