Solution -「NOI 2017」「洛谷 P3823」蚯蚓排队
\(\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」蚯蚓排队的更多相关文章
- 洛谷P3832 [NOI2017]蚯蚓排队 【链表 + 字符串hash】
题目链接 洛谷P3832 题解 字符串哈希然后丢到hash表里边查询即可 因为\(k \le 50\),1.2操作就暴力维护一下 经复杂度分析会发现直接这样暴力维护是对的 一开始自然溢出WA了,还以为 ...
- 洛谷3823 [NOI2017] 蚯蚓排队 【哈希】
题目分析: 从$\sum|S|$入手.共考虑$\sum|S|$个$f(t)$.所以我们要一个对于每个$f(t)$在$O(1)$求解的算法.不难想到是哈希. 然后考虑分裂和合并操作.一次合并操作要考虑合 ...
- 「区间DP」「洛谷P1043」数字游戏
「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...
- [CodePlus 2017 11月赛&洛谷P4058]木材 题解(二分答案)
[CodePlus 2017 11月赛&洛谷P4058]木材 Description 有 n棵树,初始时每棵树的高度为 Hi ,第 i棵树每月都会长高 Ai.现在有个木料长度总量为 S的订单, ...
- 【BZOJ】4721: [Noip2016]蚯蚓 / 【洛谷】P2827 蚯蚓(单调队列)
Description 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳 蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮 ...
- Solution -「JSOI 2019」「洛谷 P5334」节日庆典
\(\mathscr{Description}\) Link. 给定字符串 \(S\),求 \(S\) 的每个前缀的最小表示法起始下标(若有多个,取最小的). \(|S|\le3\time ...
- Solution -「洛谷 P4372」Out of Sorts P
\(\mathcal{Description}\) OurOJ & 洛谷 P4372(几乎一致) 设计一个排序算法,设现在对 \(\{a_n\}\) 中 \([l,r]\) 内的元素排 ...
- Solution -「POI 2010」「洛谷 P3511」MOS-Bridges
\(\mathcal{Description}\) Link.(洛谷上这翻译真的一言难尽呐. 给定一个 \(n\) 个点 \(m\) 条边的无向图,一条边 \((u,v,a,b)\) 表示从 ...
- Solution -「APIO 2016」「洛谷 P3643」划艇
\(\mathcal{Description}\) Link & 双倍经验. 给定 \(n\) 个区间 \([a_i,b_i)\)(注意原题是闭区间,这里只为方便后文描述),求 \(\ ...
- 「洛谷 P1801」黑匣子
好像很久没有更过博客了,因为博主这几周很忙.其实是在搞颓. 题意很难懂,所以就不重复了.其实是懒. 一眼看上去这是个 \(Splay\) 裸题,直接插入一个数,查询区间第 \(K\) 大,但是这样太不 ...
随机推荐
- vue 下载文件并且重命名
<el-button type="primary" @click="xz(scope.row)" size="small">下载 ...
- sealos快速部署K8S
使用 Sealos 快速部署一个生产级别的 Kubernetes 高可用集群 一.集群规划 k8s-master1 10.0.19.127 k8s-master2 10.0.19.128 k8s-ma ...
- P10681 COTS/CETS 2024 奇偶矩阵 Tablica
P10681 COTS/CETS 2024 奇偶矩阵 Tablica 来自 qnqfff 大佬的梦幻 dp. 约定 二元组 \((n,m)\) 表示一个 \(n\) 行 \(m\) 列的矩形. 不添加 ...
- 【一步步开发AI运动小程序】四、小程序如何抽帧
随着人工智能技术的不断发展,阿里体育等IT大厂,推出的"乐动力"."天天跳绳"AI运动APP,让云上运动会.线上运动会.健身打卡.AI体育指导等概念空前火热.那 ...
- JAVA MemCache 史无前例的详细讲解!看完包精通MEMCACHE!
Memcach什么是Memcache Memcache集群环境下缓存解决方案 Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式 ...
- Java深度历险(一)——Java字节代码的操纵
[编者按]Java作为业界应用最为广泛的语言之一,深得众多软件厂商和开发者的推崇,更是被包括Oracle在内的众多JCP成员积极地推动发展.但是对于Java语言的深度理解和运用,毕竟是很少会有人涉及的 ...
- VScode之远程开发
之前使用过PyCharm的远程开发,很好用,不过还是有几个局限性: 只能用于Python语言: 本地和服务器都需要有一份代码,这两份代码是完全同步的: 一.配置免密远程登录 1.首先检查本地是否有已生 ...
- Educational Codeforces Round 132 (Rated for Div
Educational Codeforces Round 132 (Rated for Div. 2) Recover an RBS 给你一个括号序列,里面存在?号,题目保证至少有一种方案使得该括号序 ...
- Vue.js 组件数据交互
1.前言 本节讲述组件之间如何进行数据交互 2.props属性与非 prop 的属性 父组件通过属性绑定的形式传值给子组件,这种传值分2种 类别 含义 说明 props 子组件本身已经通过props定 ...
- seldom-platform:颠覆传统的自动化测试平台
seldom-platform:颠覆传统的自动化测试平台 seldom-platform是一个自动化测试平台,其特点是让会写代码的测试人员能够通过seldom框架高效地完成自动化用例的编写,并将剩下的 ...