\(\mathscr{Description}\)

  Link.

  (自己看题, 我总不能让题意比题解还长吧?)

\(\mathscr{Solution}\)

  下一组我一定写成 solution set, 这种题就不用占题解空间了.

  维护 hash. 复杂度 \(\mathcal O(mk^2)\).

\(\mathscr{Code}\)

/* Clearink */

#include <cstdio>
#include <cassert>
#include <cstring>
#include <unordered_map> #define rep( i, l, r ) for ( int i = l, rep##i = r; i <= rep##i; ++i )
#define per( i, r, l ) for ( int i = r, per##i = l; i >= per##i; --i ) typedef unsigned long long ULL; inline int rint() {
int x = 0, s = getchar();
for ( ; s < '0' || '9' < s; s = getchar() );
for ( ; '0' <= s && s <= '9'; s = getchar() ) x = x * 10 + ( s ^ '0' );
return x;
} inline void wint( const int x ) {
if ( 9 < x ) wint( x / 10 );
putchar( x % 10 ^ '0' );
} const int MAXN = 2e5, MAXM = 3e5, MAXL = 1e7, MAXK = 50, MOD = 998244353;
int n, m, a[MAXN + 5];
const ULL BASE = 20050913;
ULL pwr[55];
int pre[MAXN + 5], nex[MAXN + 5];
char str[MAXL + 5]; struct HashTable {
static const int M = 100019, MAXND = 4e5;
int node, head[M], val[MAXND], nxt[MAXND];
ULL key[MAXND]; inline int& operator [] ( const ULL k ) {
int r = head[k % M], las = -1;
for ( ; r && key[r] != k; r = nxt[las = r] );
if ( r ) return val[r];
if ( !~las ) head[k % M] = r = ++node;
else nxt[las] = r = ++node;
return key[r] = k, val[r] = 0;
}
} buc[51]; inline int mul( const long long a, const int b ) { return int( a * b % MOD ); } inline void contr( const int p, const int q, const int v ) {
ULL h = 0;
for ( int i = p, lp = 1; i && lp < MAXK; i = pre[i], ++lp ) {
ULL r = h += pwr[lp - 1] * a[i];
for ( int j = q, lq = 1; j && lp + lq <= MAXK; j = nex[j], ++lq ) {
r = r * BASE + a[j];
buc[lp + lq][r] += v;
}
}
} int main() {
n = rint(), m = rint();
rep ( i, 1, n ) ++buc[1][a[i] = rint()]; pwr[0] = 1;
rep ( i, 1, MAXK ) pwr[i] = pwr[i - 1] * BASE; for ( int op, i, j; m--; ) {
op = rint();
if ( op == 1 ) {
i = rint(), j = rint();
nex[i] = j, pre[j] = i;
contr( i, j, 1 );
} else if ( op == 2 ) {
i = rint();
contr( i, nex[i], -1 );
pre[nex[i]] = 0, nex[i] = 0;
} else {
scanf( "%s %d", str + 1, &i );
int l = strlen( str + 1 ), ans = 1;
ULL h = 0; rep ( k, 1, i - 1 ) h = h * BASE + ( str[k] ^ '0' );
rep ( k, i, l ) {
if ( k > i ) h -= pwr[i - 1] * ( str[k - i] ^ '0' );
h = h * BASE + ( str[k] ^ '0' );
ans = mul( ans, buc[i][h] );
} wint( ans ), putchar( '\n' );
}
}
return 0;
}

Solution -「NOI 2017」「洛谷 P3823」蚯蚓排队的更多相关文章

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

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

  2. 洛谷3823 [NOI2017] 蚯蚓排队 【哈希】

    题目分析: 从$\sum|S|$入手.共考虑$\sum|S|$个$f(t)$.所以我们要一个对于每个$f(t)$在$O(1)$求解的算法.不难想到是哈希. 然后考虑分裂和合并操作.一次合并操作要考虑合 ...

  3. 「区间DP」「洛谷P1043」数字游戏

    「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...

  4. [CodePlus 2017 11月赛&洛谷P4058]木材 题解(二分答案)

    [CodePlus 2017 11月赛&洛谷P4058]木材 Description 有 n棵树,初始时每棵树的高度为 Hi ,第 i棵树每月都会长高 Ai.现在有个木料长度总量为 S的订单, ...

  5. 【BZOJ】4721: [Noip2016]蚯蚓 / 【洛谷】P2827 蚯蚓(单调队列)

    Description 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳 蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮 ...

  6. Solution -「JSOI 2019」「洛谷 P5334」节日庆典

    \(\mathscr{Description}\)   Link.   给定字符串 \(S\),求 \(S\) 的每个前缀的最小表示法起始下标(若有多个,取最小的).   \(|S|\le3\time ...

  7. Solution -「洛谷 P4372」Out of Sorts P

    \(\mathcal{Description}\)   OurOJ & 洛谷 P4372(几乎一致)   设计一个排序算法,设现在对 \(\{a_n\}\) 中 \([l,r]\) 内的元素排 ...

  8. Solution -「POI 2010」「洛谷 P3511」MOS-Bridges

    \(\mathcal{Description}\)   Link.(洛谷上这翻译真的一言难尽呐.   给定一个 \(n\) 个点 \(m\) 条边的无向图,一条边 \((u,v,a,b)\) 表示从 ...

  9. Solution -「APIO 2016」「洛谷 P3643」划艇

    \(\mathcal{Description}\)   Link & 双倍经验.   给定 \(n\) 个区间 \([a_i,b_i)\)(注意原题是闭区间,这里只为方便后文描述),求 \(\ ...

  10. 「洛谷 P1801」黑匣子

    好像很久没有更过博客了,因为博主这几周很忙.其实是在搞颓. 题意很难懂,所以就不重复了.其实是懒. 一眼看上去这是个 \(Splay\) 裸题,直接插入一个数,查询区间第 \(K\) 大,但是这样太不 ...

随机推荐

  1. leetcode 740 删除并获得点数

    740 删除并获得点数 题意 给你一个整数数组 nums ,你可以对它进行一些操作. 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数.之后,你必须删除 所有 等于 n ...

  2. 24暑集训Week1

    24暑集训Week1 夜行的人,若你不唱歌的话,不惊醒这黑夜的话,就永远也走不出呼蓝别斯了. 这重重的森林,这崎岖纤细的山路,这孤独疲惫的心. 亲爱的,哪怕后来去到了城市,走夜路时也要大声地唱歌,像喝 ...

  3. LeetCode128 最长连续序列

    最长连续序列 题目链接:LeetCode128 描述 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度. 请你设计并实现时间复杂度为 O(n) 的算法 ...

  4. RT-Thread Studio刚新建工程后直接打开main.c编译就board.c里产生报错,解决办法

    如题,RT-Thread Studio刚新建工程后直接打开main.c编译就产生报错. 具体为:刚新建了一个stm32F407ZGT6和一个STM32F103RCT6的工程,之后啥代码也没有改,直接打 ...

  5. 初识cuda一文通

    cuda学习博客 本文为本人cuda学习过程中的记录和理解,多参考@谭升等大佬前辈的博客,以及NVIDIA官方文档.如有错误烦请指正,如有侵权请联系删除. 0. 并行计算与计算机架构 计算机架构是并行 ...

  6. vue-amap接入高德地图示例

    通过 CDN 的方式我们可以很容易地使用 vue-amap 写出一个 Hello world 页面. 什么是CDN? 定义是这样的:CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通 ...

  7. VL4AD:让语义分割认识未知类别,无需额外数据和训练的OOD语义分割 | ECCV'24

    来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: VL4AD: Vision-Language Models Improve Pixel-wise Anomaly Detection 论文地址 ...

  8. Pylon C++ Programmer's Guide

    移步至Pylon C++ Programmer's Guide观看效果更佳 Getting Started pylon编程指南是一个关于如何使用Basler pylon C++ API进行编程的快速指 ...

  9. 纪念第一次在 Github 上提 ISSUE 得到了老哥的回复

    背景 第一次在 GitHub 上提 ISSUE,提问的内容就是我的上一篇博文 rustlings v6.0 运行时出现 " You are trying to run Rustlings u ...

  10. 使用nginx 压缩

    现在的程序使用单页面应用,因此程序会在一开始就会加载页面JS.如果带宽不够,那么会影响页面下载速度. 我们可以使用NGINX 进行压缩,加快文件下载. gzip on; gzip_min_length ...