acwing复习滑动窗口 trie字符串统计 合并集合

news2024/10/24 21:26:09

题目

给定一个字符串 S,以及一个模式串 P,所有字符串中只包含大小写英文字母以及阿拉伯数字。

模式串 P 在字符串 S 中多次作为子串出现。

求出模式串 P 在字符串 S 中所有出现的位置的起始下标。

输入格式

第一行输入整数 N,表示字符串 P 的长度。

第二行输入字符串 P。

第三行输入整数 M,表示字符串 S 的长度。

第四行输入字符串 S。

输出格式

共一行,输出所有出现位置的起始下标(下标从 0 开始计数),整数之间用空格隔开。

数据范围

1≤N≤1e5
1≤M≤1e6

输入样例:

3
aba
5
ababa

7
ABABABC
3
ABA
输出样例:

0 2

代码
#include <iostream>

using namespace std;
const int N = 100010;

int q[N];
int a[N];

int n,k;
int main()
{
	//输入数组的长度  和滑动窗口的长度
	cin >> n >> k;

	for (int i = 0; i < n; i++) cin >> a[i];


	int hh = 0, tt = -1;
	for (int i = 0; i < n; i++)
	{
		//首先判断队头是否还在滑动窗口里面
		//如果不在 hh++
		while ( tt >= hh && i - k + 1> q[hh]) hh++;

		//如果下一个元素要大于当亲的队尾元素  则tt--
		while (tt >= hh && a[i] <= a[q[tt]]) tt--;

		q[++tt] = i;

		if (i - k + 1 >= 0) cout << a[q[hh]] << ' ';

	}
	puts("");
	hh = 0, tt = -1;
	for (int i = 0; i < n; i++)
	{
		//首先判断队头是否还在滑动窗口里面
		//如果不在 hh++
		while (tt >= hh && i - k + 1 > q[hh]) hh++;

		//如果下一个元素要大于当亲的队尾元素  则tt--
		while (tt >= hh && a[i] >= a[q[tt]]) tt--;

		q[++tt] = i;

		if (i - k + 1 >= 0) cout << a[q[hh]] << ' ';

	}
	return 0;
}
总结

只要代码敲的勤快 就越写越快 又快有对

题目:trie字符串统计

维护一个字符串集合,支持两种操作:

1、 I x向集合中插入一个字符串 x;
2、 Q x询问一个字符串在集合中出现了多少次。
共有 N个操作,所有输入的字符串总长度不超过10^5 ,字符串仅包含小写英文字母。

输入格式

第一行包含整数 N,表示操作数。

接下来 N行,每行包含一个操作指令,指令为 I x 或 Q x 中的一种。

输出格式

对于每个询问指令 Q x,都要输出一个整数作为结果,表示 x在集合中出现的次数。

每个结果占一行。

数据范围

1≤N≤2∗10^4

输入样例:

5
I abc
Q abc
Q ab
I ab
Q ab

输出样例:

1
0
1

#include <iostream>

using namespace  std;
const int N = 10010;
char str[N];

//储存trie树
int s[N][26];
int cnt[N];//表设计
int idx; //表示当前匹配到的位置
void insert(char *str)
{
	//从顶点开始寻找
	int p = 0;
	//从字符串的第一个开始往下来寻找
	for (int i = 0; str[i]; i++)
	{
		//先把该位置的字符变成数字
		int n = str[i] - 'a';
		//当前字符不存在的话  创建一个
		if (!s[p][n])  s[p][n] = ++idx;
		p = s[p][n];
	}
	cnt[p] ++ ;// 以该数字为结尾的字符加一

}

int query(char *str)
{
	int p = 0;
	for (int i = 0; str[i]; i++)
	{
		int n = str[i] - 'a';
		if (!s[p][n]) return 0;
		p = s[p][n];
	}
	return cnt[p];
}

int main()
{
	int n;
	cin >> n;
	while (n--)
	{
		char op[2];
		cin >> op >> str;
		if (op[0] == 'I')
			insert(str);
		else cout << query(str);
	}

	return 0;
}

题目:合并集合

一共有 n个数,编号是 1 ∼ n ,最开始每个数各自在一个集合中。

现在要进行 m个操作,操作共有两种:

1、 M a b,将编号为 a 和 b 的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作;
2、 Q a b,询问编号为 a 和 b 的两个数是否在同一个集合中;

输入格式

第一行输入整数 n 和 m 。

接下来 m 行,每行包含一个操作指令,指令为M a bQ a b中的一种。

输出格式

对于每个询问指令Q a b,都要输出一个结果,如果 a和 b 在同一集合内,则输出 Yes,否则输出 No。

每个结果占一行。

数据范围

1 ≤ n ,m≤10^5

输入样例:

4 5
M 1 2
M 3 4
Q 1 2
Q 1 3
Q 3 4

输出样例:

Yes
No
Yes

代码
#include <iostream>

using namespace std;
const int N = 100010;
int n, m;
int p[N];
//找到数字的头节点
int find(int o)
{
	//如果o不是父节点  就让父节点等于祖宗节点
	if (p[o] != o) p[o] = find(p[o]);
	return p[o];
}
int main()
{
	cin >> n >> m;
	//将头结点都存进p数组中
	for (int i = 1; i <= n; i++) p[i] = i;
	while (m--)
	{
		char op[2];
		int x, y;
		cin >> op>> x >> y;
		if (op[0] == 'M')
		{
			//x的祖宗节点的父亲等于 y的祖宗节点
			if (find(x) != find(y)) p[find(x)] = find(y); 
		}
		else {
			if (find(x) == find(y)) cout << "YES\n" ;
			else cout << "NO\n";
		}


	}

	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2222717.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java | Leetcode Java题解之第497题非重叠矩形中的随机点

题目&#xff1a; 题解&#xff1a; class Solution {Random rand;List<Integer> arr;int[][] rects;public Solution(int[][] rects) {rand new Random();arr new ArrayList<Integer>();arr.add(0);this.rects rects;for (int[] rect : rects) {int a rect[0…

【大模型问答测试】大模型问答测试脚本实现(第二版)——接入pytest与代码解耦

背景 接上一篇&#xff0c;【大模型问答测试】大模型问答测试脚本实现&#xff08;第一版&#xff09;。 在实现自动化的时候&#xff0c;原先把很多方法与request请求写在一块了&#xff0c;趁着目前实现接口数量较少&#xff0c;决定对代码进行解耦&#xff0c;并且清晰目录…

《梦里花落知多少》凄美地,如同散落的花

《梦里花落知多少》凄美地&#xff0c;如同散落的花 三毛&#xff08;1943/3/26~1991/01/04&#xff09;&#xff0c;本名陈平&#xff0c;当代女作家&#xff0c;旅行家。著有《雨季不再来》《撒哈拉的故事》《哭泣的骆驼》《稻草人手记》《温柔的夜》《梦里花落知多少》等作品…

HDFS异常org.apache.hadoop.hdfs.protocol.NSQuotaExceededException

HDFS异常org.apache.hadoop.hdfs.protocol.NSQuotaExceededException 异常信息&#xff1a; Hive:org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: The NameSpace quota (directories and files) of directory /xxxdir is exceeded: quota10000 file count15001N…

代码随想录-哈希表-有效的字母异位词

思路 哈希表的三种方式:数组、set、map 本题采用数组形式的哈希表来解决 三个注意事项: ①数组哈希表定义&#xff0c;包括思路和原始大小 ②Java中字符串的某个字符访问方式&#xff0c;字符串长度的方法 ③for-each循环的书写方式 代码 class Solution {public boole…

Python 爬虫下载图片

使用免费的代理ip进行网络请求,降低了反爬机制的触发率。加入自动发送邮件的功能,在代码运行出错的时候可以及时收到提醒消息。 主程序代码: import requests import os import time from lxml import etree from bs4 import BeautifulSoup import random # 自定义模块,发…

安全防护修改用户sudo权限

修改ssh端口 vim /etc/ssh/sshd_config 修改port端口为60022端口&#xff0c;端口最大为65535 修改完&#xff0c;重启服务 可以看到此时ssh监听端口为60022,此时远程登陆时就需要用端口60022&#xff0c;原来的22端口拒绝访问 下载nmap端口扫描工具 用命令nmap 192.168.45.…

CZX前端秘籍2

vue生命周期&#xff08; 组件从创建到销毁的过程就是它的生命周期&#xff09; 创建前 beforeCreat&#xff08; 在这个阶段属性和方法都不能使用&#xff09; 创建时 created&#xff08; 这里时实例创建完成之后&#xff0c; 在这里完成了数据监测&#xff0c; 可以使用数…

【C++进阶】之C++11的简单介绍(二)

&#x1f4c3;博客主页&#xff1a; 小镇敲码人 &#x1f49a;代码仓库&#xff0c;欢迎访问 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f30f; 任尔江湖满血骨&#xff0c;我自踏雪寻梅香。 万千浮云遮碧…

C#使用log4net结合sqlite数据库记录日志

0 前言 为什么要把日志存到数据库里? 因为结构化的数据库存储的日志信息,可以写专门的软件读取历史日志信息,通过各种条件筛选,可操作性极大增强,有这方面需求的开发人员可以考虑。 为什么选择SQLite? 轻量级数据库,免安装,数据库的常用的基本功能都有,可以随程序…

批量修改YOLO格式的标注类别

1.解决的问题 假如你有一个YOLO格式的数据集&#xff0c;标注类别为0&#xff0c;1&#xff0c;2&#xff0c;3四个类别标签。如果你想删除标签1&#xff0c;只保留0&#xff0c;2&#xff0c;3类别的标注信息&#xff0c;或者想将标签0和标签1合并为标签1&#xff0c;只剩下标…

第三届“奇安信杯”网络安全技能竞赛 部分题目WriteUP

第三届“奇安信杯”网络安全技能竞赛WriteUP 文章目录 第三届“奇安信杯”网络安全技能竞赛WriteUPMISCGIFpycseeyouagain CRYPTObase全家桶base6432rsa WEB MISC GIF 下载附件&#xff0c;解压得到test1.jpg。 用010 Editor打开&#xff0c;发现GIF文件头&#xff0c;修改文…

从“Hello World”到“Success” —— 1024程序员节的感悟与成长

目录 1.成为程序员 2.成长之路 3.困难与挑战 4.磨炼与前进 5.总结与收获 6.感悟 1.成为程序员 今天&#xff0c;我们迎来了专属于程序员的节日——1024程序员节。这一天不仅是对所有编程爱好者的致敬&#xff0c;更是回顾过去一年来成长历程的时刻。对于每一位踏上编程之旅…

AI带货主播如何打造真实视觉效果!

AI带货主播作为新兴的数字营销手段&#xff0c;正在逐步改变着电商行业的面貌&#xff0c;AI技术的不断进步使得带货主播能够以更加真实、生动的视觉效果展现在消费者面前&#xff0c;从而大大提升了购物体验和销售转化率。 那么&#xff0c;AI带货主播如何打造真实视觉效果呢…

深入浅出神经网络:从基础原理到高级应用

第5章 神经网络 更加详细内容可以看这篇文章 5.1 神经元模型 神经网络的基本单元是神经元模型。神经元模拟了生物神经元的行为&#xff0c;通过接收输入信号&#xff0c;进行加权求和&#xff0c;然后经过激活函数输出结果。 数学上&#xff0c;一个简单的神经元可以表示为&…

业务开发常见问题-并发工具类

hello&#xff0c;大家好&#xff0c;本讲我们一起聊一下常见的几个并发工具类的使用和坑&#xff01; 在日常工作中&#xff0c;我们经常会遇到多线程并发问题&#xff0c;比如ThreadLocal、锁、ConcurrentHashMap、CopyOnWriteArrayList等。那么如何正常的使用呢&#xff1f;…

P7400 [COCI2020-2021#5] Magenta 题解

#1024程序员节&#xff5c;征文# 人生中的第二道紫题。。。 题目传送门 解题思路 下文中的距离指的是 a , b a,b a,b 之间的边的数量。 Sub 2 即所有边 Paula 与 Marin 都可以行走。 根据题意 Paula 先手。因此&#xff0c;如果一开始 Paula 动不了&#xff0c;那么 M…

浏览器的渲染过程

文章目录 什么是浏览器的渲染&#xff1f;浏览器渲染过程面试问点&#xff1a;为什么操作DOM慢&#xff1f;回流与重绘那么&#xff0c;什么情况下会触发回流&#xff1f; 浏览器的优化 什么是浏览器的渲染&#xff1f; 简单的说就是浏览器将 HTML 代码解析出来&#xff0c;把…

轻松学会!回收站数据恢复的几种妙招

回收站数据恢复方法是一个涉及计算机操作和数据安全的重要话题。在日常使用电脑的过程中&#xff0c;我们经常会遇到误删文件或清空回收站的情况&#xff0c;导致重要数据丢失。幸运的是&#xff0c;有多种方法可以尝试恢复这些丢失的数据。以下将详细介绍几种常见的回收站数据…

C++: C/C++内存管理

前言 本篇博客将详细介绍C的内存管理 &#x1f496; 个人主页&#xff1a;熬夜写代码的小蔡 &#x1f5a5; 文章专栏&#xff1a;C 若有问题 评论区见 &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐文章 ​ 一.C/C内存分布 让我们先来看看下面的代码吧 int globalVar 1; st…