BZOJ4943 & 洛谷3823 & UOJ315:[NOI2017]蚯蚓排队——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4943
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]蚯蚓排队——题解的更多相关文章
- 洛谷P1854 花店橱窗布置 分析+题解代码
洛谷P1854 花店橱窗布置 分析+题解代码 蒟蒻的第一道提高+/省选-,纪念一下. 题目描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定 ...
- HAOI2006 (洛谷P2341)受欢迎的牛 题解
HAOI2006 (洛谷P2341)受欢迎的牛 题解 题目描述 友情链接原题 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之 ...
- 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)
洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...
- 洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速$dp\&Floyd$)
洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速\(dp\&Floyd\)) 标签:题解 阅读体验:https://zybuluo.com/Junl ...
- 洛谷P3832 [NOI2017]蚯蚓排队 【链表 + 字符串hash】
题目链接 洛谷P3832 题解 字符串哈希然后丢到hash表里边查询即可 因为\(k \le 50\),1.2操作就暴力维护一下 经复杂度分析会发现直接这样暴力维护是对的 一开始自然溢出WA了,还以为 ...
- [NOI2017]蚯蚓排队 hash
题面:洛谷 题解: 我们暴力维护当前所有队伍内的所有子串(长度k = 1 ~ 50)的出现次数. 把每个子串都用一个hash值来表示,每次改变队伍形态都用双向链表维护,并暴力更新出现次数. 现在考虑复 ...
- 【洛谷3822】[NOI2017] 整数(线段树压位)
题目: 洛谷 3822 分析: 直接按题意模拟,完了. 将每次加 / 减拆成不超过 \(32\) 个对单独一位的加 / 减. 考虑给一个二进制位(下称「当前位」)加 \(1\) 时,如果这一位本来就是 ...
- 洛谷 P1146 【硬币翻转】题解
很久很久之前做过的一道题 翻n-1枚硬币,就是有一枚不翻,也可以理解为翻一枚 直接上程序,看程序说话 #include<iostream> using namespace std; ; b ...
- 洛谷P1972 [SDOI2009]HH的项链 题解
[SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不 ...
随机推荐
- Python Map 并行
Map是一个酷酷的小东西,也是在Python代码轻松引入并行的关键.对此不熟悉的人会认为map是从函数式语言(如Lisp)借鉴来的东西.map是一个函数 - 将另一个函数映射到一个序列上.例如: ur ...
- InnoDB意向锁和插入意向锁
Preface Last night one buddy in tech wechat group asked "what's intention locks of Inno ...
- CSS随笔3
1. CSS部分简洁使用 * background-radious:使得边框角“圆化”. * background:pink url(“图片路径”) no-repeat: * border 可以有 ...
- Python入门编程中的变量、字符串以及数据类型
//2018.10.10 字符串与变量 1. 在输出语句中如果需要出现单引号或者双引号,可以使用转义符号\,它可以将其中的歧义错误解释化解,使得输出正常: 2. 对于python的任何变量都需要进行赋 ...
- Memcached命令-存储命令-查找命令-清理命令
Memcached set 存储命令 Memcached set 命令用于将 value(数据值) 存储在指定的 key(键) 中. 如果set的key已经存在,该命令可以更新该key所对应的原来的数 ...
- 如何处理 jQuery $(window).resize() 中的方法被多次执行的小问题
引言: 估计很多同志们在编写浏览器resize()的方法时,都会遇到这样的情况: 当拖动浏览器的边角时,页面中的一些效果随浏览器大小的改变而触发,这一过程开始到结束,resize() 中的方法被执行了 ...
- [Clr via C#读书笔记]Cp19可空值类型
Cp19可空值类型 主要解决的是和数据库中null对应的问题: System.Nullable结构:值类型: int?语法: 可空实例能够使用操作符: C#空合并操作符??; 即可用于引用类型,也可以 ...
- Java开发中用的比较多的数据结构
java 中几种常用数据结构 2016年07月11日 09:11:27 阅读数:83211 标签: 数据结构java 更多 个人分类: 自行学习 JAVA中常用的数据结构(java.util. 中 ...
- 一些容易记混的c++相关知识点
一些容易记混的c++相关知识. 截图自:<王道程序员面试宝典>
- HDU 4302 Holedox Eating (线段树模拟)
题意:一个老鼠在一条长度为L的直线上跑,吃蛋糕,老鼠只能沿直线移动.开始时没有蛋糕,老鼠的初始位置是0. 有两个操作,0 x 代表在位置x添加一个蛋糕: 1 代表老鼠想吃蛋糕.老鼠每次都会选择离自己最 ...