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 不 ...
随机推荐
- android 学习六 构建用户界面和使用控件
1.常用Android控件最终都会继承自View类 2.ViewGroup是一些布局类列表的基类,包括View和ViewGroup 3.构造界面的三种方法 a.完全使用代码(太灵活,而不好维护) ...
- 「日常训练」 Longest Run on a Snowboard (UVA-10285)
题意 其实就是一条二维的LIS,但是还是做的一愣一愣的,多努力. 考虑$dp[i][j]$为从(i,j)出发的二维LIS的最大值,那么$dp[i][j]=max\{dp[i−di[k]][j−dj[k ...
- mybati缓存机制之二级缓存配置
二级缓存配置 在MyBatis的配置文件中开启二级缓存. <setting name="cacheEnabled" value="true"/> 在 ...
- Postman 高级用法指南
Postman是一款强大的API接口测试工具,有许多不容易发现的好用的功能,下面简单介绍其中一部分功能.详细内容可以参考文档,官方还有视频教程,非常方便入手.后续本博客会持续提供一些Postman使用 ...
- Linux命令应用大词典-第6章 文件处理
6.1 sort:对文件中的数据进行排序 6.2 uniq:将重复行从输出文件中删除 6.3 cut:从文件每行中输出选定的字节.字符或字段 6.4 comm:逐行比较两个已经排序的文件 6.5 di ...
- 《Git学习指南》学习笔记(二)
第三章 提交究竟是什么 每次提交都会生成一个40位的散列值.只要知道散列值,我们就可以恢复到该次提交,这个操作也被称之为检出(checkout)操作. 访问权限与时间戳 Git会保存每个文件原有的访问 ...
- SpringCloud IDEA 教学 番外篇 后台运行Eureka服务注册中心
写在开头 研发过程中经常要做的事就是启动Eureka服务注册中心,每每都要启动一个IDEA,很是困扰.现在分享一个后台启动服务注册中心的方法. 准备工作 1打包一个eureka服务注册中心jar包(注 ...
- [leetcode-676-Implement Magic Dictionary]
Implement a magic directory with buildDict, and search methods. For the method buildDict, you'll be ...
- c# 编译的dll看不见注释问题
1.项目属性---->生成----->勾选XML文档文件: 2.使用的时候该文件和dll放在一块.
- 针对“来用”团队项目之NABC分析
本项目特点之一:扩展性强 NABC分析: N(need):我们这个开发的这个软件主要是集娱乐软件和实用工具于一身的大容器,这里面有很多应用程序,针对不同用户需要,至少有一款应用程序能够满足用户的需要, ...