\(\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. MySql5.7及以上 ORDER BY 报错问题

    一.问题 本人使用的MySql版本是8.0的 当MySql5.7及以上的版本执行带有 ORDER BY 的SQL语句时可能会报错. 例如,执行以下mysql语句: SELECT id, user_id ...

  2. NOIP2024模拟赛7:纯粹当下

    NOIP2024模拟赛7:纯粹当下 今日挂分:95pts...... T2 \(T\) 组数据, 每组给定 \(n,k,f,a_i\), 一个序列 \(b\) 满足 \(b_i \in [a_i-k, ...

  3. games101_Homework5

    使用光线追踪来渲染图像,实现两个部分:光线的生成和光线与三角的求交 你需要修改的函数是: • Renderer.cpp 中的 Render():这里你需要为每个像素生成一条对应的光 线,然后调用函数 ...

  4. 大便系统无法使用source的原因及解决方法

    debian中shell脚本无法使用source的原因及解决方法 现象: shell脚本中source aaa.sh时提示 source: not found 原因: ls -l `which sh` ...

  5. Docker配置Trojan代理

    1.遇到的问题 在做云计算作业,使用阿里云的ECS服务器尝试使用docker拉取镜像的时候,发现一直无法从仓库拉取,更换了多个镜像源也没有解决问题,于是决定学会去配置linux的代理,记录过程. 2. ...

  6. Emoji表情字符大全增强你的表达能力-记事本也可以有情感,总有一个您用得上,复制粘贴即可,赶紧收藏关注!!!

    这是手绘的吗?不,它是Emoji表情字符,就是普通的文本,你不相信? ️️️️️️ 上面的内容,你看得见吗?尝试选中复制一下,再粘贴到其它地方? 我在PC上和Android手机上操作都是正常的 这是记 ...

  7. The 2024 ICPC Asia East Continent Online Contest (I) C

    Link: Permutation Counting 4 我的评价是神题,给出两种做法. 方法一 利用线代技巧. 设法构造矩阵 \(A\), 其中 \(A_{ij} = [j \in [l_i, r_ ...

  8. 鸿蒙NEXT开发案例:数字转中文大小写

    [引言] 本应用的主要功能是将用户输入的数字转换为中文的小写.大写及大写金额形式.用户可以在输入框中输入任意数字,点击"示例"按钮可以快速填充预设的数字,点击"清空&qu ...

  9. MySQL之批量更新多条记录不同值

    之前文章:https://www.cnblogs.com/xingxia/p/mysql_basic.html mysql更新语句很简单,更新一条数据的某个字段,一般这样写: UPDATE mytab ...

  10. 理解Java BlockingQueue

    数据结构与算法是天生一对. BlockingQueue叫做阻塞队列,在Java线程池相关的实现中有广泛的使用. BlockingQueue实现的功能如下: 当队列为空时,往队列中读数据将被阻塞. 当队 ...