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$天最多收入多少. ...
随机推荐
- redis centos集群搭建和java应用
1. 首先要ssh免密登录 redis集群,3台虚拟机,6个节点,每台机器2个节点一主一从. 192.168.132.154 c0192.168.132.156 c1192.168.132.155 c ...
- 将多个jpg文件以追加形式合并成一个文件_delphi教程 bmp 合并 http://www.west.cn/www/info/58058-1.htm
将多个jpg文件以追加形式合并成一个文件_delphi教程 作者:网友供稿 点击:0 西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!云服务器 ...
- 常见的网络设备:集线器 hub、网桥、交换机 switch、路由器 router、网关 gateway
Repeater 中继器 Hub 集线器 bridge 网桥 switch 交换机 router 路由器 gateway 网关 网卡 参考资料: do-you-know-the-differences ...
- EL表达式(三)自定义 EL 表达式
自定义EL函数(静态方法): 编写步骤: 1.编写一个Java类,提供一个静态方法 import java.util.List; public class GetLength { public sta ...
- upc组队赛16 Winner Winner【位运算】
Winner Winner 题目链接 题目描述 The FZU Code Carnival is a programming competetion hosted by the ACM-ICPC Tr ...
- Oracle简单学习
最近一段时间重温了oracle关于存储过程和oracle包以及function中的定义, 先看一下要用的表: devices(id number, name varchar2, age number) ...
- python 爬虫之requests爬取页面图片的url,并将图片下载到本地
大家好我叫hardy 需求:爬取某个页面,并把该页面的图片下载到本地 思考: img标签一个有多少种类型的src值?四种:1.以http开头的网络链接.2.以“//”开头网络地址.3.以“/”开头绝对 ...
- 《STL源码剖析》——第五、六:关联容器与算法
第五章.关联容器 5.0.关联容器 标准的STL关联式容器分为set(集合)和map(映射表)两大类,以及这两大类的衍生体multiset(多键集合)和multimap(多键映射表).这些容器的底层 ...
- eclipse新建maven项目出错 pom.xml报错
问题: 1.新建项目后会提示一个这样的错 maven-compiler-plugin:3.1:compile(1 errors) maven-compiler-plugin:3.1:testCompi ...
- CentOS安装ruby, Haskall,io语言
安装ruby yum install ruby irb rdoc 安装Haskall yum install ghc 安装io语言 安装io语言,需要先安装cmake不过不要使用yum来进行安装,yu ...