LOJ 2303 「NOI2017」蚯蚓排队——链表+哈希表
题目:https://loj.ac/problem/2303
想到合并的时候可以只考虑接口附近的50个,但不太会分析复杂度,而且没有清楚地想到用哈希值对应个数。
看了题解才会……
一直想用 splay ,其实链表就可以。用 unsigned long long 就不会被卡。
不能用 map ,而是要用哈希表把字符串的哈希值映射到个数上。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll unsigned long long
using namespace std;
int rdn()
{
int ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return fx?ret:-ret;
}
const int mod=; const ll bs=;
const int N=2e5+,m2=1e6+,M=1e7+,K=; int n,m,vl[N],pr[N],nt[N],ct[M];
ll tp[M],p[K],bin[K];char s[M];//ll!!! not int
namespace H{
int hd[m2+],xnt,nxt[M];ll to[M];
int get(ll x)
{
int h=x%m2;
for(int i=hd[h];i;i=nxt[i])
if(to[i]==x)return i;
to[++xnt]=x;nxt[xnt]=hd[h];hd[h]=xnt;
return xnt;
}
}
void mrg(int x,int y,bool fx)
{
if(!fx){nt[x]=y; pr[y]=x;} else{y=nt[x]; nt[x]=pr[y]=;}
int tot=,cr=y;
while(cr)
{
tot++; tp[tot]=(tp[tot-]*bs+vl[cr]);
cr=nt[cr]; if(tot==)break;
}
int tt=; cr=x;
while(cr)
{
tt++; p[tt]=(p[tt-]+vl[cr]*bin[tt-]);
cr=pr[cr]; if(tt==)break;
}
for(int i=tt;i;i--)
for(int j=;j<=tot;j++)
{
if(i+j>)break;
ll h=p[i]*bin[j]+tp[j];
int tp=H::get(h);
if(fx)ct[tp]--;
else ct[tp]++;
}
}
int main()
{
n=rdn();m=rdn();
bin[]=;
for(int i=;i<=;i++)
{
bin[i]=bin[i-]*bs;
}
for(int i=;i<=n;i++)
{
vl[i]=rdn();
int k=H::get(vl[i]); ct[k]++;
}
for(int i=,op,x,y;i<=m;i++)
{
op=rdn();
if(op==){ x=rdn();y=rdn();mrg(x,y,);}
if(op==){ x=rdn();mrg(x,,);}
if(op==)
{
scanf("%s",s+); x=rdn(); y=strlen(s+);
for(int j=;j<=y;j++)
tp[j]=(tp[j-]*bs+(s[j]-''));
int ans=;
for(int j=x;j<=y;j++)
{
ll h=tp[j]-tp[j-x]*bin[x];
int tp=H::get(h);
ans=(long long)ans*ct[H::get(h)]%mod;
}
printf("%d\n",ans);
}
}
return ;
}
LOJ 2303 「NOI2017」蚯蚓排队——链表+哈希表的更多相关文章
- LOJ#2303. 「NOI2017」蚯蚓排队
$n \leq 200000$的$1 \leq a_i \leq 6$的蚯蚓,有三种操作:让一只队头蚯蚓接在一只队尾蚯蚓后面:让一队蚯蚓从某个蚯蚓后面断成两队:问:给个字符串,问他的..算了你们直接看 ...
- LOJ2303 「NOI2017」蚯蚓排队
「NOI2017」蚯蚓排队 题目描述 蚯蚓幼儿园有$n$只蚯蚓.幼儿园园长神刀手为了管理方便,时常让这些蚯蚓们列队表演. 所有蚯蚓用从$1$到$n$的连续正整数编号.每只蚯蚓的长度可以用一个正整数表示 ...
- 「NOI2017」蚯蚓排队 解题报告
「NOI2017」蚯蚓排队 这题真的草 你考虑\(k\)这么小,每次合并两个串,增加的有用串的数量是\(O(k^2)\)的,暴力加入这些串,求一下这些串的Hash值,塞到Hash表里面去 这里采用类似 ...
- 【BZOJ4943】【NOI2017】蚯蚓排队(哈希)
[BZOJ4943][NOI2017]蚯蚓排队(哈希) 题面 BZOJ 洛谷 UOJ 题解 记得去年看网络同步赛的时候是一脸懵逼的. 昨天看到\(zsy\)做了,今天就看了看.. 这不是\(Hash\ ...
- loj #2305. 「NOI2017」游戏
#2305. 「NOI2017」游戏 题目描述 小 L 计划进行 nnn 场游戏,每场游戏使用一张地图,小 L 会选择一辆车在该地图上完成游戏. 小 L 的赛车有三辆,分别用大写字母 AAA.BBB. ...
- loj#2305. 「NOI2017」游戏 2-sat
链接 https://loj.ac/problem/2305 https://www.luogu.org/problemnew/show/P3825 思路 3-sat神马的就不要想了,NP问题 除去x ...
- LOJ 2304 「NOI2017」泳池——思路+DP+常系数线性齐次递推
题目:https://loj.ac/problem/2304 看了各种题解…… \( dp[i][j] \) 表示有 i 列.第 j 行及以下默认合法,第 j+1 行至少有一个非法格子的概率,满足最大 ...
- LOJ 2302 「NOI2017」整数——压位线段树
题目:https://loj.ac/problem/2302 压30位,a最多落在两个位置上,拆成两次操作. 该位置加了 a 之后,如果要进位或者借位,查询一下连续一段 0 / 1 ,修改掉,再在含有 ...
- *LOJ#2306. 「NOI2017」蔬菜
$n \leq 100000$种蔬菜,每个蔬菜有:一单位价格:卖第一单位时额外价格:总量:每天腐烂量.每天能卖$m \leq 10$单位蔬菜,多次询问:前$k \leq 100000$天最多收入多少. ...
随机推荐
- 批处理脚本学习笔记1--vmware虚拟机启停控制
起因 因工作需要,在WIN10笔记本上通过vmware workstation装了两台CentOS虚机(CentOS_1.CentOS_2),经常需要进行虚机的启停切换操作,通过vmware的控制台操 ...
- UGUI OnValueChanged 动态参数指定
在选择方法的时候注意,选择最上面的动态参数的方法.
- 《JAVA设计模式》之组合模式(Composite)
在阎宏博士的<JAVA与模式>一书中开头是这样描述合成(Composite)模式的: 合成模式属于对象的结构模式,有时又叫做“部分——整体”模式.合成模式将对象组织到树结构中,可以用来描述 ...
- ApplicationContextAware 快速获取bean
在Web应用中,Spring容器通常采用声明式方式配置产生:开发者只要在web.xml中配置一个Listener,该Listener将会负责初始化Spring容器,MVC框架可以直接调用Spring容 ...
- Java双链表
一.概述 二.英雄类 class HeroNode { //值域 public int id; public String name; public String nickName; //指针域 pu ...
- #3831 TJOI2013单词
WOJ#3831 TJOI2013单词 题面 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. 输入 第一个一个整数 N ,表示有 ...
- python------模块和包及异常处理
一.模块 所有的模块导入都应该尽量往上写,且顺序为: a:内置模块 b:扩展模块 c:自定义模块 #my_module.py print('from the my_module.py') money= ...
- 2019 Multi-University Training Contest 1 - 1011 - Function - 数论
http://acm.hdu.edu.cn/showproblem.php?pid=6588 新学到了一个求n以内与m的gcd的和的快速求法.也就是下面的S1. ①求: $ \sum\limits_{ ...
- Go语言_更多类型:struct、slice 和映射
更多类型:struct.slice 和映射 学习如何基于现有类型定义新的类型:本节课涵盖了结构体.数组.切片和映射. Go 作者组编写,Go-zh 小组翻译. https://tour.go-zh.o ...
- vue + element 创建教程
一.环境准备 node安装 node版本:v10.15.3 node下载地址:https://nodejs.org/zh-cn/ vue-cli安装 全局安装vue-cli npm install - ...