
数据结构进阶
Wa_Automata
这个作者很懒,什么都没留下…
展开
-
河南萌新联赛2024第(二)场:南阳理工学院 E - “好”字符
当某个字符 x 在字符串 a 与字符串 b 或 b 的循环同构中出现的所有位置依次对应时(对于字符串的每一位,要么 a 和 b 的这一位都是该字符,要么都不为该字符),称该字符为“好”字符。字符串的循环同构:表示把字符串的左边第一位移到最后一位,新串再进行这样的操作,得到的一些字符串都是原串的循环同构,例如"bcda"、“cdab”、"dabc"都是"abcd"的循环同构。说明 当b的循环同构体为"ababfe"时,字符’a’为“好”字符,当b的循环同构体为"feabab"时,字符’b’为“好”字符。原创 2024-07-26 14:08:19 · 288 阅读 · 0 评论 -
HDU - 7326 String Magic (Easy Version)
#### Problem DescriptionZ is learning string theory and he finds a difficult problem.Given a string $S$ of length $n$ (indexed from $1$ to $n$) , define $f(S)$ equal to the number of pair $(i,j)$ that:- $1≤i0$ ($j−i+1$ is even)-原创 2023-12-01 07:59:50 · 1054 阅读 · 0 评论 -
2023河南萌新联赛第(六)场:河南理工大学 L - 阴晴不定的大橘学长
在通往院楼的道路上,大橘学长总会对小W行注目礼,而小W也会上前摸一摸大橘学长给今天带来$ac$的好运。虽然大橘学长是一只猫,但是大橘学长也会有心情不好的时候。现在给你一个大橘学长心情的临界值$x$,并给你$n$个时刻,第$i$个时刻的心情值是$a[i]$,对于任意的$[l,r]$时间段内如果 $(\sum_{i=l}^{r}a[i] ) \geq x$,说明在这个时间段内是可以抚摸大橘学长的,如果在大橘学长心情不好的时候抚摸它,会招致$wa$的坏运气以及学长愤怒的利爪, 现在请聪明的你来编写原创 2023-08-22 22:11:47 · 181 阅读 · 0 评论 -
2023河南萌新联赛第(五)场:郑州轻工业大学 J - 树上DP
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K。给定一棵树, 根节点为 $1$,每个节点都有权值,可以交换**任意次**任意相邻节点的权值,定义一棵树的美丽值为该树的所有子树的节点的权值和的总和,求美丽值最大值为多少?原创 2023-08-14 12:06:36 · 271 阅读 · 0 评论 -
2023河南萌新联赛第(四)场:河南大学 F - 小富的idea
卷王小富最近又在内卷,并且学了一门新的技能:书法,但是不幸的是在国庆节的书法大赛上,小富不小心打翻了墨水瓶,导致很多墨滴溅在了他的书法纸上,看着墨水不断扩散,浸透了他的书法纸,小富突然萌生了一个想法:我能不能知道某时刻纸上一共有多少墨块? 我们假设墨滴是同时溅在纸上的,并且它们起始大小都为 000,由于墨滴大小不同,因此它们的扩散速度也不同,姑且假设墨滴都是按圆形扩散,如果两个或以上墨滴在扩散过程中相遇,那么就称它们为一个墨块(单独一个墨滴也是墨块),并且假设墨滴相遇不影响它的扩散,对于任原创 2023-08-09 17:51:00 · 1234 阅读 · 0 评论 -
2023河南萌新联赛第(三)场:郑州大学 A - 发工资咯
时间限制:C/C++ 2秒,其他语言4秒空间限制:C/C++ 262144K,其他语言524288K。原创 2023-07-29 20:31:21 · 438 阅读 · 2 评论 -
2023河南萌新联赛第(二)场:河南工业大学 F - 最短距离
# [2023河南萌新联赛第(二)场:河南工业大学 F - 最短距离](https://ac.nowcoder.com/acm/contest/61132/L)>时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K64bit IO Format: %lld#### 题目描述 给定一棵包含 $n$ 个顶点的树 $T$ ,以及 $m$ 个查询请求。每个查询包含三个参数 $:x、y$ 和 $k$。其中 $x$ 和 $y$ 是树中的两个顶点,$k$原创 2023-07-28 20:18:09 · 275 阅读 · 0 评论 -
2023河南萌新联赛第(一)场:河南农业大学 L - 中位数
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 524288K,其他语言1048576K。原创 2023-07-25 18:07:27 · 182 阅读 · 0 评论 -
2022河南萌新联赛第(六)场:郑州大学 D - 树上祖先询问
代码】2022河南萌新联赛第(六)场:郑州大学 D - 树上祖先询问。原创 2022-08-15 12:39:25 · 109 阅读 · 0 评论 -
2022河南萌新联赛第(五)场:信息工程大学 H - 小明喝奶茶
正解是用一个权值线段树什么的维护一下,取一下第K小值,但是我不会。只能打打暴力,发现数据比较水,也能过,就当练练模拟了。原创 2022-08-08 13:35:42 · 267 阅读 · 1 评论 -
2022河南萌新联赛第(四)场:郑州轻工业大学 A - ZZULI
这道题由于要计算连通块大小,可以使用并查集,关键在于如何去合并。合并是没有区别的,那么要合并的一组数就用第一个去合并一遍。按照规则向后合并一遍,再拿第一个。按照规则向后合并一遍,再拿第一个。按照规则向后合并一遍即可。...原创 2022-07-31 22:48:29 · 242 阅读 · 0 评论 -
HDU - 1087 Super Jumping! Jumping! Jumping!(LIS,最大上升子序列求和,nlogn做法)
因为这道题数据范围比较小,暴力n^2做法就可以AC,后面给大家介绍一种 当 1原创 2021-07-31 11:31:31 · 179 阅读 · 0 评论 -
2022河南萌新联赛第(三)场:河南大学 B - 逆序对计数
解法首先,对于一个排列,如果区间反转,逆序数等于区间种所有的。对数减去当前的逆序对数,即原本的正序对变为逆序对,原本的逆。位置,到他的前面的每一个位置比他大的数有多少个,统计完直接。如果对于每个位置记录其到后面所有位置的逆。当然也可以使用树状数组统计逆序对,可以很好的通过本题。的数的个数,所以可以事前统计对于每一个。序对个数即可解决本题,考虑从。...原创 2022-07-25 18:39:11 · 216 阅读 · 0 评论 -
2022河南萌新联赛第(二)场:河南理工大学 D - 数对
我们就可以在值域上维护一个树状数组,维护每个前面的前缀和数值的个数的。由于值域很大很大,树状数组开不下,所以我们要先将前缀和数组离散化。的总个数,也就是所有满足上述条件的左边界,然后再给。,每次将答案累加上树状数组中大于等于。进行预处理得到前缀和数组。题目要求我们找出满足。...原创 2022-07-20 12:46:40 · 179 阅读 · 0 评论 -
2022河南萌新联赛第(二)场:河南理工大学 K - 大米
偶数)之间来回转换,因此每次操作就相当于对区间。在施法的过程中都只会在。初始都是奇数,所有的。原创 2022-07-20 11:50:03 · 131 阅读 · 0 评论 -
2022河南萌新联赛第(一)场:河南工业大学 G - 热身小游戏
线段树将 qqq 次操作看成一个长度为 qqq 的序列,初始值都是 111 。对于第 iii 次操作,如果是操作 111 则将下标为 iii 的位置修改为 aaa,对于操作 222 则进行区间修改为 111,对于操作 333 就是区间求乘积。时间复杂度为O(nlogn)O(n\log{n})O(nlogn)...原创 2022-07-11 01:55:41 · 674 阅读 · 0 评论 -
PTA L3-032 关于深度优先搜索和逆序对的题应该不会很难吧这件事 (30 分)
背景知识深度优先搜索与 DFSDFSDFS 序深度优先搜索算法(DFS)(DFS)(DFS)是一种用于遍历或搜索树或图的算法。以下伪代码描述了在树 TTT 上进行深度优先搜索的过程:令 rrr 为树 TTT 的根,调用 DFS(T,r,L)DFS(T,r,L)DFS(T,r,L) 即可完成对 TTT 的深度优先搜索,保存在链表 LLL 中的排列被称为 DFSDFSDFS 序。相信聪明的你已经发现了,如果枚举子节点的顺序不同,最终得到的 DFSDFSDFS 序也会不同。逆序对给定一个长度为 nnn原创 2022-06-20 23:26:14 · 1652 阅读 · 1 评论 -
HDU - 1542 Atlantis(线段树+扫描线+离散化)
HDU - 1542 AtlantisProblem DescriptionThere are several ancient Greek texts that contain descriptions of the fabled island Atlantis. Some of these texts even include maps of parts of the island. But unfortunately, these maps describe different regions原创 2022-05-23 17:20:36 · 238 阅读 · 0 评论 -
HDU - 4614 Vases and Flowers(线段树二分)
HDU - 4614 Vases and Flowers(线段树二分)#include<iostream>#include<cstdio>using namespace std;const int N = 50010;struct Node{ int l,r,sum; int lazy;}tr[N<<2];void pushup(int u){ tr[u].sum=tr[u<<1].sum+tr[u<<1|1].sum;原创 2022-04-25 11:32:41 · 218 阅读 · 0 评论 -
HDU - 3613 Best Reward(字符串哈希)
HDU - 3613 Best Reward(字符串哈希)#include<iostream>#include<cstring>#include<vector>using namespace std;typedef unsigned long long ULL;const int N = 500010, base = 13331;ULL hl[N],hr[N],p[N];char str[N];int a[30],s[N];ULL get(ULL h原创 2022-04-13 19:36:11 · 315 阅读 · 0 评论 -
HDU - 3974 Assign the task(DFS序建树)
HDU - 3974 Assign the task#include<cstdio>#include<cstring>#include<set>using namespace std;const int N = 50010, M = 100010;int l[N],r[N],cnt;int h[N],e[M],ne[M],idx;struct Node { int l,r,v; bool flag;}tr[N<<2];v原创 2022-04-07 09:28:31 · 306 阅读 · 0 评论 -
HDU - 1540 Tunnel Warfare(set)
HDU - 1540 Tunnel Warfareset做法#include<iostream>#include<cstdio>#include<set>#include<stack>using namespace std;int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF) { set<int> se={0,n+1}; stack<int&g原创 2022-04-05 18:34:50 · 146 阅读 · 0 评论 -
HDU - 4027 Can you answer these queries?(线段树)
HDU - 4027 Can you answer these queries?一道不能使用懒标记的区间修改线段树。第一眼看到题,区间修改,区间查询子段和,一眼线段树 + 懒标记,但是在写的过程中发现了不对,我们没有办法写出pushdownpushdownpushdown这个函数(当然也许有比较巧妙的方法能写)也就是说我们不能在未更新子树的情况下更新自己(很显然,因为这里是区间求根操作)那么我们只能抛弃掉O(logn)O(logn)O(logn)修改,采用比较高的O(n)O(n)O(n)修改最原创 2022-04-05 16:39:39 · 400 阅读 · 0 评论 -
POJ - 3264 Balanced Lineup(RMQ倍增,线段树)
POJ - 3264 Balanced Lineup(RMQ倍增,线段树)RMQ倍增#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;const int M = 16, N = 1 << M;int n, m;int w[N], f[N][M], g[N][M];void init(){原创 2022-04-04 13:58:27 · 695 阅读 · 0 评论 -
ZOJ - 1610 Count the Colors(模拟,线段树)
vjudge链接https://vjudge.csgrandeur.cn/problem/ZOJ-1610ZOJ官方链接https://zoj.pintia.cn/problem-sets/91827364500/problems/91827365109#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int N = 8010;int a[N], colo原创 2022-04-04 08:57:56 · 400 阅读 · 0 评论 -
HDU - 1698 Just a Hook(线段树)
HDU - 1698 Just a Hook#include<cstdio>#include<cstring>const int N = 100010;struct Node{ int l,r; int sum,lazy;}tr[N*4];void pushup(int u){ tr[u].sum=tr[u<<1].sum+tr[u<<1|1].sum;}void pushdown(int u){ Node &root=原创 2022-04-01 12:15:40 · 209 阅读 · 0 评论 -
POJ - 2528 Mayor‘s posters(set,线段树)
POJ - 2528 Mayor’s postersset做法从后往前扫描,查询当前l-r区间是否已经被完全覆盖,然后将l~r覆盖一遍。我们考虑只把一部分的点放到set中以起到跟上述做法同样的效果:类似于离散化,只把每张海报的l,r,r+1三个点插入set,当l-r区间内没有点留在set中时,l-r区间一定是被完全覆盖了,这样时间复杂度降到了O(nlogn),而且代码量比线段树小非常多。#include<cstdio>#include<vector>#include原创 2022-03-31 17:38:57 · 708 阅读 · 0 评论 -
HDU - 1754 I Hate It(线段树)
HDU - 1754 I Hate It(线段树)#include<iostream>using namespace std;const int N =200010;int n,m,s[N];struct Node{ int l,r,v;}tr[N*4];inline void pushup(int u){ tr[u].v=max(tr[u<<1].v,tr[u<<1|1].v);}inline void build(int u,i原创 2022-03-31 16:32:13 · 295 阅读 · 0 评论 -
POJ - 1308 Is It A Tree?(并查集)
POJ - 1308 Is It A Tree?并查集用于判断是否存在环入度数组用于判断下述条件:(1)除了根节点外,每个节点都有且仅有一条指向它的边。(2)从根节点到每个其他节点都有一条唯一的有向边序列。#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int N = 10010;int a, b, cnt, idx;int s[原创 2022-03-26 18:28:59 · 482 阅读 · 0 评论 -
POJ - 2912 Rochambeau(带权并查集)
POJ - 2912 Rochambeau(带权并查集)#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N = 505, M = 2005;int n, m, l, f[N * 3];int X[M], Y[M], Z[M];int find(int x) { return x == f[x] ? x : f[x] = fin原创 2022-03-26 18:16:30 · 410 阅读 · 0 评论 -
ZZULIOJ 2889: 移动元素(Hash)
ZZULIOJ 2889: 移动元素(Hash)⾸先,要想将⼀个数组分成前后两个部分且各元素和相等,那么整个数组元素之和必须为偶数。其次,移动元素,可以从左往右移动,也可以从右往左移动,那么就可以分别判断这两种情况是否可以达到⽬的,可以枚举前缀和判断从左往右移,枚举后缀和判断从右往左移。先判断从左往右移,枚举前缀和,将p[i]p[i]p[i]作为前⼀部分,arr[i]arr[i]arr[i]移动到后⼀部分,那么我们只需要判断p[i]−arr[i]=p[n]2p[i]-arr[i]=\frac{p[n]原创 2022-02-14 15:59:52 · 172 阅读 · 0 评论 -
HDU - 5542 The Battle of Chibi(树状数组+DP)
UVA - 12983 The Battle of Chibi(树状数组+DP)HDU - 5542 The Battle of Chibi(树状数组+DP)#include<cstdio>#include<cstring>#include<algorithm>#include<vector>using namespace std;const int N = 1010, MOD = 1e9 + 7;int n,m,a[N],tr[N],f原创 2022-02-04 17:01:48 · 425 阅读 · 0 评论 -
POJ - 1201 Intervals(贪心+数据结构)
POJ - 1201 Intervals(贪心+数据结构)考虑把所有线段按照右端点 bbb 从小到大排序,依次考虑每一条线段的要求:如果已经满足要求则跳过否则尽量选择靠后的数(因为之后的线段的右端点都在这条线段的右边,这样容错更高)所以,我们可以建一个数组,f[i]f[i]f[i] 表示 iii 数字是否选择(填111或000),扫一遍[l,r][l,r][l,r] 区间求和,然后从后往前贪心放数即可。对于每条线段需要 O(r−l+1)O(r−l+1)O(r−l+1)。所以最坏情况下 O(n原创 2022-01-26 15:56:35 · 502 阅读 · 0 评论 -
POJ - 1193 内存分配
POJ - 1193 内存分配数据结构:等待队列:(内存长度, 占用时间):queue内存使用情况:(起始下标,长度),线性扫描、删除、插入:set小根堆:(释放时间key,起始下标),priority_queue算法流程:新来一个请求:(T,M,P)释放掉所有 释放时间 <= T 的内存,每次释放之后,都要判断等待队列的队头是否可以满足判断(T,M,P)是否可以满足,如果不可以,则插入等待队列#include<iostream>#include<que原创 2022-01-19 18:13:32 · 208 阅读 · 0 评论 -
POJ - 3690 Constellations(二维字符串Hash)
POJ - 3690 Constellations#include<cstdio>#include<vector>#include<set>using namespace std;typedef unsigned long long ULL;const int N = 1010, M = N * N, P = 131;ULL hashv[N][N],p[M];char str[N];ULL calc(ULL f[],int l,int r){ re原创 2022-01-19 17:32:34 · 218 阅读 · 0 评论 -
POJ - 3630 Phone List(Trie树,暴力)
POJ - 3630 Phone List用Trie树判断前缀,或者暴力排序直接找#include<stdio.h> #include<string.h>const int N = 10010, M = N * 10;char str[N][15];int son[M][26],cnt[M],idx;void insert(char *str) // 插入字符串{ int p=0; for(int i=0;str[i];i++) {原创 2022-01-13 17:12:43 · 295 阅读 · 0 评论 -
POJ - 1635 Subway tree systems(树的最小表示)
POJ - 1635 Subway tree systems#include<iostream>#include<algorithm>#include<vector>using namespace std;string dfs(string &a, int &u){ u++; vector<string> b; while(a[u]=='0') b.push_back(dfs(a,u)); u+原创 2022-01-12 16:42:12 · 232 阅读 · 0 评论 -
POJ - 3974 Palindrome(字符串Hash)
POJ - 3974 Palindrome#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef unsigned long long ULL;const int N = 1000010, P = 131;char str[N];ULL h1[N],h2[N],p[N];ULL hash1(int l,int r){return h1[r]-h1原创 2022-01-11 19:38:31 · 203 阅读 · 0 评论 -
ZZULIOJ 2699: 二进制与、平方和(线段树)
2699: 二进制与、平方和#include<stdio.h>typedef long long LL;const int N = 300010, MOD = 998244353;LL a[N];struct Node{ int l,r,sum,cnt[25];}tr[N*4];void pushup(int u){ tr[u].sum=(tr[u<<1].sum+tr[u<<1|1].sum)%MOD; for(int i=0;i&l原创 2022-01-04 11:19:20 · 371 阅读 · 0 评论 -
ZZULIOJ 2700: 子串翻转回文串(字符串Hash)
2700: 子串翻转回文串#include<cstdio>#include<cstring>typedef unsigned long long ULL;const int N = 1000010, MOD = 1e9 + 7;ULL h1[N],h2[N],p[N];char s[N];int get1(int l,int r){ return (h1[r]-h1[l-1]*p[r-l+1]%MOD+MOD)%MOD;}int get2(int l,i原创 2022-01-03 15:34:11 · 472 阅读 · 0 评论