https://www.lydsy.com/JudgeOnline/problem.php?id=4943

http://uoj.ac/problem/315

https://www.luogu.org/problemnew/show/P3823#sub

题面太长自己看吧orz。

参考:洛谷题解。

用链表暴力维护每个蚯蚓,每次合并和分离只对k*k的元素有影响,哈希一下存起来query时候比较就好了。

没了。

(具体复杂度我不会证明,以及bzoj卡空间,正常的哈希表空间总觉得不能开如代码所示的这么小。)

(自然溢出hash真的块)

#include<cmath>
#include<stack>
#include<vector>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=2e5+;
const int K=;
const int mod=;
const int p=;
const int B=;
inline int read(){
int X=,w=;char ch=;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch))X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
struct node{
int nxt,cnt;
ll w;
}e[];
char s[];
int n,m,cnt,head[p+],t[],a[N];
int nxt[N],pre[N];
ull f[K*+],base[K+];
inline void add(ull w,int on){
int u=w%p;
for(int i=head[u];i;i=e[i].nxt){
if(e[i].w==w){
e[i].cnt+=on;return;
}
}
e[++cnt].cnt=;e[cnt].w=w;e[cnt].nxt=head[u];head[u]=cnt;
}
inline int ask(ull w){
int u=w%p;
for(int i=head[u];i;i=e[i].nxt){
if(e[i].w==w)return e[i].cnt;
}
return ;
}
void merge(int x,int y){
int l=K+,r=K;
memset(f,,sizeof(f));
for(int i=x;i&&l>;i=pre[i])f[--l]=a[i];
for(int j=y;j&&r<*K;j=nxt[j])f[++r]=a[j];
for(int i=l;i<=r;i++)f[i]+=f[i-]*B;
for(int i=l;i<=K;i++){
for(int j=K+;j<=min(r,i+K-);j++){
add(f[j]-f[i-]*base[j-i+],);
}
}
nxt[x]=y;pre[y]=x;
}
void split(int x,int y){
int l=K+,r=K;
memset(f,,sizeof(f));
for(int i=x;i&&l>;i=pre[i])f[--l]=a[i];
for(int j=y;j&&r<*K;j=nxt[j])f[++r]=a[j];
for(int i=l;i<=r;i++)f[i]+=f[i-]*B;
for(int i=l;i<=K;i++){
for(int j=K+;j<=min(r,i+K-);j++){
add(f[j]-f[i-]*base[j-i+],-);
}
}
nxt[x]=;pre[y]=;
}
int query(int k){
ll ans=;ull val=;int len=strlen(s+);
if(k==)
for(int i=;i<=len;i++)
ans=ans*t[s[i]-'']%mod;
else{
for(int i=;i<=len;i++){
val=val*B+s[i]-'';
if(i>k)val-=base[k]*(s[i-k]-'');
if(i>=k)ans=ans*ask(val)%mod;
}
}
return ans;
}
int main(){
n=read(),m=read();
base[]=;
for(int i=;i<=K;i++)base[i]=base[i-]*B;
for(int i=;i<=n;i++){
a[i]=read();t[a[i]]++;
}
for(int i=;i<=m;i++){
int op=read();
if(op==){
int x=read(),y=read();
merge(x,y);
}
if(op==){
int x=read();
split(x,nxt[x]);
}
if(op==){
scanf("%s",s+);
int k=read();
printf("%d\n",query(k));
}
}
return ;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/ +

+++++++++++++++++++++++++++++++++++++++++++

BZOJ4943 & 洛谷3823 & UOJ315:[NOI2017]蚯蚓排队——题解的更多相关文章

  1. 洛谷P1854 花店橱窗布置 分析+题解代码

    洛谷P1854 花店橱窗布置 分析+题解代码 蒟蒻的第一道提高+/省选-,纪念一下. 题目描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定 ...

  2. HAOI2006 (洛谷P2341)受欢迎的牛 题解

    HAOI2006 (洛谷P2341)受欢迎的牛 题解 题目描述 友情链接原题 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之 ...

  3. 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)

    洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...

  4. 洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速$dp\&Floyd$)

    洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速\(dp\&Floyd\)) 标签:题解 阅读体验:https://zybuluo.com/Junl ...

  5. 洛谷P3832 [NOI2017]蚯蚓排队 【链表 + 字符串hash】

    题目链接 洛谷P3832 题解 字符串哈希然后丢到hash表里边查询即可 因为\(k \le 50\),1.2操作就暴力维护一下 经复杂度分析会发现直接这样暴力维护是对的 一开始自然溢出WA了,还以为 ...

  6. [NOI2017]蚯蚓排队 hash

    题面:洛谷 题解: 我们暴力维护当前所有队伍内的所有子串(长度k = 1 ~ 50)的出现次数. 把每个子串都用一个hash值来表示,每次改变队伍形态都用双向链表维护,并暴力更新出现次数. 现在考虑复 ...

  7. 【洛谷3822】[NOI2017] 整数(线段树压位)

    题目: 洛谷 3822 分析: 直接按题意模拟,完了. 将每次加 / 减拆成不超过 \(32\) 个对单独一位的加 / 减. 考虑给一个二进制位(下称「当前位」)加 \(1\) 时,如果这一位本来就是 ...

  8. 洛谷 P1146 【硬币翻转】题解

    很久很久之前做过的一道题 翻n-1枚硬币,就是有一枚不翻,也可以理解为翻一枚 直接上程序,看程序说话 #include<iostream> using namespace std; ; b ...

  9. 洛谷P1972 [SDOI2009]HH的项链 题解

    [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不 ...

随机推荐

  1. serv-u自动停止的解决方法

    在主界面serv-u管理控制台-主页--管理服务器----服务器详细信息下,点击“创建,修改并删除服务器事件”找到“事件”右击空白处---“添加”然后如下图所示填写: 点击“保存”就好了,而且我自己也 ...

  2. Visual Studio 智能提示功能消失解决办法

    步骤如下: 开始菜单 -->所有程序-->Visual Studio 2012文件夹 --> Visual Studio Tools --> Developer Command ...

  3. Qt-QML-Loader初步接触

    先说说为什么用到了QML的Loader,这里我就要先扯点别的,那就是QML自带的ColorDialog,QML的机制 是优先调用系统提供的ColorDialog,如果系统的ColorDialog的不可 ...

  4. 180612-Spring之Yml配置文件加载问题

    Yml配置文件加载问题 在resource目录下有一个application.yml文件,希望是通过@PropertySource注解,将配置文件数据读取到Environment中,然而调试发现数据始 ...

  5. Linux命令应用大词典-第 15章 文件、目录权限和属性

    15.1 chmod:更改文件和目录的模式 15.2 chown:更改文件和目录的用户所有者和组群所有者 15.3 chgrp:更改文件或目录的所属组 15.4 umask:显示和设置文件及目录创建默 ...

  6. Struts2(八.添加用户多张照片实现文件上传功能)

    1.modify.jsp 在modify.jsp修改用户信息页面实现文件上传,添加用户照片的功能 如果是文件上传,method必须是post,必须指定enctype <form method=& ...

  7. PNG和PVR之间互相转换的脚本

    项目经常会将png和pvr之间互相转换,这里mark一个脚本,会将当前目录下的文件全部批量转换 png转换成pvr @echo off path %path%;"C:\Program Fil ...

  8. Java学习笔记-10.io流

    1.输入流,只能从中读取数据,而不能向其写出数据.输出流,只能想起写入字节数据,而不能从中读取. 2.InputStream的类型有: ByteArrayInputStream 包含一个内存缓冲区,字 ...

  9. 解析范式(1NF-4NF)

    亲爱的盆友们~又是新的一年,你,准备好新的学习计划了吗~?是读书100本,还是考上5个证?嘛~不管怎么说,角落里那一堆蒙尘的计划表好像在昭示着这仍然是一个充满朝气又艰难的9102年呢!总之,先把#技本 ...

  10. 剑指offer-包含min函数的栈20

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). class Solution: def __init__(self): self.st ...