第四次月模拟题-201809-3

2023-05-16

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
题目分析:
本题很绕,但是关键的部分非常简洁,实际上就是对应的查找字符而已,只不过复杂一点的是可能会有分级,这样我们就要用一个树结构来储存,首先我们先要定义一个结构题,包含标签、名字。前面的点(因为这些点是要输入的,所以单独处理,而且这些点的数目也能体现所在的层次)还有它的父母(确定是在第几层)。

struct tree
{
	string tag;
	string name;
	int dots;
	tree* parent;
	tree(int dots,string tag,string name):dots(dots),tag(tag),name(name),parent(0){}
};

首先我们确定如何查找对应的序列,那么我们就要看开头是啥,如果是#那就是属性,直接找就可以了。

	if(s[0]=='#')
	{
		if(s==t->name)
		{
			return true;
		}
		else
		{
			return false;
		}
	}

否则就是正常的查找,如果字符串大小不一样肯定不会相等,减少了比较的次数。相等的话就依次比较,注意这里面大小写不敏感,意味着就都得转换为小写或者大写然后比较,只要有一个不相等就false,都相等就true。

		if(s.size()!=t->tag.size())
		{
			return false;
		}
		int ssize=s.size();
		for(int i=0;i<ssize;i++)
		{
			if(tolower(s[i])!=tolower(t->tag[i]))
			{
				return false;
			}
		}
		return true;
	}

然后就是分开这一个一个的单词了,因为输入之间有空格,在编译器里空格表示输入完成,所以我们对于一行多个输入就要用先统一读取一行然后在分开他们的方法,遇到了空格就意味着读取完成,清空继续读取,否则就加入到字符中来。

	int ssize=s.size();
	for(int i=0;i<ssize;i++)
	{
		if(s[i]==' ')
		{
			vec.push_back(token);
			token.clear();
		}
		else
		{
			token+=s[i];
		}
	}
	vec.push_back(token);

为了体现层次性,我们定义一个栈来储存当前是第几层的字符内容,我们前面说了可以数点来判断是第几层。

		int dots=0;
		while(line[dots]=='.')
		{
			dots++;
		}

这样,我们根据点的个数就可以判断栈的层次,只需要找到比点比他小的位置就可以设置为父亲了,层次性就解决了。

		tree* now=new tree(dots,tag,name);
		if(!sta.empty())
		{
			tree* top;
			while(top=sta.top(),top->dots>=dots)
			{
				sta.pop();
			}
			now->parent=top;
		}
		sta.push(now);
		nodes.push_back(now);

之后就是比较环节了。对于每一个结点来说,从最下层最后一个字符依次往前比较,如果对上了就往前字符比较并且往上走,如果比较到头了依然符合要求那就意味着符合要求,此时就可以记录下行数了。

		int nsize=nodes.size();
		for(int i=0;i<nsize;i++)
		{
			int sl=sel.size()-1;
			if(check(sel[sl],nodes[i])==true)
			{
				tree* t=nodes[i]->parent;
				sl--;
				while(t!=0&&sl>=0)
				{
					if(check(sel[sl],t)==true)
					{
						sl--;
					}
					t=t->parent;
				}
				if(sl==-1)
				{
					ans.push_back(i+1);
				}
			}
		}

输出的时候记得带上空格,而且第一个是大小后面的是行数,所以要分开两部分输出,同时输出完毕之后记得换行。

		cout<<ans.size()<<" ";
		int asize=ans.size();
		for(int i=0;i<asize;i++)
		{
			cout<<ans[i]<<" ";
		}
		cout<<endl;

代码如下:

#include<iostream>
#include<cstring>
#include<vector>
#include<stack>
#include<sstream>
using namespace std;
struct tree
{
	string tag;
	string name;
	int dots;
	tree* parent;
	tree(int dots,string tag,string name):dots(dots),tag(tag),name(name),parent(0){}
};
bool check(const string &s,tree *t)
{
	if(s[0]=='#')
	{
		if(s==t->name)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	else
	{
		if(s.size()!=t->tag.size())
		{
			return false;
		}
		int ssize=s.size();
		for(int i=0;i<ssize;i++)
		{
			if(tolower(s[i])!=tolower(t->tag[i]))
			{
				return false;
			}
		}
		return true;
	}
}
void devide(const string &s,vector<string> &vec)
{
	string token;
	token.clear();
	vec.clear();
	int ssize=s.size();
	for(int i=0;i<ssize;i++)
	{
		if(s[i]==' ')
		{
			vec.push_back(token);
			token.clear();
		}
		else
		{
			token+=s[i];
		}
	}
	vec.push_back(token);
}
int main()
{
	int n,m;
	cin>>n>>m;
	string line;
	getline(cin,line);
	vector<tree*> nodes;
	nodes.clear();
	stack<tree*> sta;
	while(!sta.empty())
	{
		sta.pop();
	}
	for(int i=1;i<=n;i++)
	{
		getline(cin,line);
		int dots=0;
		while(line[dots]=='.')
		{
			dots++;
		}
		string tag,name;
		stringstream ss(line.substr(dots));
		ss>>tag>>name;
		tree* now=new tree(dots,tag,name);
		if(!sta.empty())
		{
			tree* top;
			while(top=sta.top(),top->dots>=dots)
			{
				sta.pop();
			}
			now->parent=top;
		}
		sta.push(now);
		nodes.push_back(now);
	}
	vector<string> sel;
	vector<int> ans;
	while(m--)
	{
		getline(cin,line);
		devide(line,sel);
		ans.clear();
		int nsize=nodes.size();
		for(int i=0;i<nsize;i++)
		{
			int sl=sel.size()-1;
			if(check(sel[sl],nodes[i])==true)
			{
				tree* t=nodes[i]->parent;
				sl--;
				while(t!=0&&sl>=0)
				{
					if(check(sel[sl],t)==true)
					{
						sl--;
					}
					t=t->parent;
				}
				if(sl==-1)
				{
					ans.push_back(i+1);
				}
			}
		}
		cout<<ans.size()<<" ";
		int asize=ans.size();
		for(int i=0;i<asize;i++)
		{
			cout<<ans[i]<<" ";
		}
		cout<<endl;
	}
}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第四次月模拟题-201809-3 的相关文章

  • windows下Anaconda更改默认python环境的方法

    windows Linux下Anaconda更改默认python环境的方法 更改anaconda安装目录下 anaconda3 Scripts activate bat文件 将第24行 span class token decorator
  • 文献管理软件Zotero常用插件安装及配置使用

    文献管理软件 Zotero常用插件安装及配置使用 一 Zotero安装与同步盘配置1 下载Zotero并安装2 配置Zotero xff08 1 xff09 配置同步盘 xff08 以onedrive为例 xff09 如果不配置同步盘 xf
  • Github本地仓库使用学习记录

    一 注册Github账号 在官网注册github的账号 xff1a https github com 二 下载git本地客户端并安装 Windows 三个平台下载地址 xff1a http git scm com downloads 国内的
  • Win10+GTX 1660 SUPER安装Cuda11.5.1+cudnn8.3.0

    Win10 43 GTX 1660 SUPER安装Cuda11 5 1 43 cudnn8 3 0 一 cuda11 5 1安装步骤1 查看电脑的显卡驱动2 下载显卡驱动3 下载需要的cuda版本 二 对应版本Cudnn安装1 注册nvid
  • python的列表数据写入excel表

    python的列表数据写入excel表 将python代码生成的一个列表数值导入到excel发现按照行列排列不能全部输出到excel表的一列当中 xff0c 查阅资料后发现可以用下面的函数进行写入 span class token keyw
  • 最新zotero与obsidian笔记联动教程(可代替citations和mdnotes)

    最新zotero与obsidian笔记联动教程 xff08 可代替citations和mdnotes xff09 一 联动原理二 插件配置1 zotero better bibtex2 Bibnotes Formatter3 MarkDBC
  • 第十四周作业-必做2

    题目描述 xff1a Q老师 得到一张 n 行 m 列的网格图 xff0c 上面每一个格子要么是白色的要么是黑色的 Q老师认为失去了 十字叉 的网格图莫得灵魂 一个十字叉可以用一个数对 x 和 y 来表示 其中 1 x n 并且 1 y m
  • Ubuntu18.04系统及相关软件安装恢复过程

    Ubuntu18 04系统及相关软件安装恢复过程 一 常用软件安装1 系统安装 https blog csdn net qq 43309940 article details 116656810 2 显卡驱动安装 https blog cs
  • mujoco安装及urdf转xml方法记录

    参考 mujoco210及mujoco py安装 下载适用于Linux或 OSX的 MuJoCo 2 1 版二进制文件 将mujoco210的下载的目录解压到 mujoco mujoco210路径下 注意 xff1a 如果要为包指定非标准位
  • 多台虚拟机实现局域网内互连

    Step1 xff1a 要在同一局域网内连接上对方的虚拟机 xff0c 就要相应地使用VMware的桥接模式 xff0c 以桥接到这一局域网的网卡上 这里以我连接的学校的局域网为例 xff1a Step2 xff1a 打开VMware的虚拟
  • C++判断成绩等级

    else if span class token macro property span class token directive hash span span class token directive keyword include
  • C++判断一个数是不是质数

    详见及参考 xff1a https www nowcoder com practice b8bb5e7703da4a83ac7754c0f3d45a82 tpId 61 225 amp tags 61 amp title 61 amp di
  • C++比较字符串大小(自己实现strcmp()函数)

    详见 xff1a https www nowcoder com practice 963e455fdf7c4a4a997160abedc1951b tpId 61 225 amp tags 61 amp title 61 amp diffi
  • sql多表查询之合并查询(union)

    题1 https www nowcoder com practice 203d0aed8928429a8978185d9a03babc tpId 61 240 amp tags 61 amp title 61 amp difficulty
  • C++统计字符串中各类型字符的个数

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • python对array数组(或矩阵)进行重新排序(且索引确保不同)

    首先需要知道一性质 xff1a pandas的dataframe或numpy的array matrix xff0c 都可以直接通过索引列表进行排序 例如三维的array数组 xff1a A xff0c A shape 61 x y z 则A
  • 数据分析之数理基础与概率统计

    文章目录 随机误差的分布是 96 正态分布 xff08 高斯分布 xff09 96 中心极限定理和大数定律两类错误置信区间 置信度 xff08 置信水平 xff09 协方差是啥 xff0c 怎么判断协方差正负辛普森悖论的例子ABtest1
  • 第九次模拟测试-2

    题目描述 据传 xff0c 2020年是宇宙射线集中爆发的一年 xff0c 这和神秘的宇宙狗脱不了干系 xff01 但是瑞神和东东忙 于正面对决宇宙狗 xff0c 宇宙射线的抵御工作就落到了ZJM的身上 假设宇宙射线的发射点位于一个 平面
  • 为什么16位的Norflash错位接地址线

    NOR Flash的数据宽度是16位的 xff0c 与2440处理器的连接时 xff0c 地址线必须错位进行连接 s3c2440的地址线A0悬空 xff0c A1连接NOR Flash的地址线A0 xff0c A2连接NOR Flash的地
  • MYSQL中 on和where的区别

    https blog csdn net tayngh article details 99684035 在这个博客的基础上补充一下 这是用on的输出结果 xff1a 这是用where的输出结果 xff1a 结合上面链接的博客的文字内容理解

随机推荐

  • Centos7安装ntopng

    Centos7安装ntopng 基础环境配置参照centos7模板机搭建 1 安装依赖项 span class token function cat span span class token operator lt lt span EOF
  • 安装FileZilla,在pc机上,与虚拟机进行文件传输

    FileZilla是一个免费 xff0c 开源的跨平台FTP应用程序 我们可以使用它 xff0c 使pc机与虚拟机的ubuntu进行文件传输 FileZilla下载地址 https www filezilla cn download cli
  • Week12 B - 必做题 - 2

    Week12 B 必做题 2 zjm被困在一个三维的空间中 现在要寻找最短路径逃生 xff01 空间由立方体单位构成 zjm每次向上下前后左右移动一个单位需要一分钟 xff0c 且zjm不能对角线移动 空间的四周封闭 zjm的目标是走到空间
  • Week14 C - Q老师的考验(必做)

    Week14 C Q老师的考验 xff08 必做 xff09 Q老师 对数列有一种非同一般的热爱 xff0c 尤其是优美的斐波那契数列 这一天 xff0c Q老师 为了增强大家对于斐波那契数列的理解 xff0c 决定在斐波那契的基础上创建一
  • Nuitka打包代码为exe

    Nuitka 是一个用于将Python程序打包为可执行文件的第三方模块 相较于PyInstaller xff1a 其能够实现打包体积更小 打包后的程序运行速度更快 程序编译加密 并且不会出现 系统找不到文件路径 winerror3 的错误
  • Qt编写DLL以及调用DLL的方法

    备忘录之用 使用Qt编写DLL 1 使用QtCreator创建Library项目 点击NewProject按钮选择Library项目 选择C 43 43 Library后点击 Choose 按钮 2 编写代码后保存并编译程序在项目目录下找到
  • VSCode配置C/C++环境

    VSCode简介 VSCode是一款微软出的轻量级编辑器 xff0c 它本身只是一款文本编辑器而已 xff0c 所有的功能都是以插件扩展的形式所存在 xff0c 想用什么功能就安装对应的扩展即可 xff0c 非常方便 xff0c 同时也支持
  • Qt 线程中QThread的使用

    文章目录 Qt 线程中QThread的使用1 线程类 QThread1 1 常用共用成员函数1 2 信号槽1 3 静态函数1 4 任务处理函数 2 使用方式 12 2 示例代码3 使用方式 23 1 操作步骤3 2 示例代码 Qt 线程中Q
  • 第九次模拟测试-3

    题目描述 在瑞神大战宇宙射线中我们了解到了宇宙狗的厉害之处 xff0c 虽然宇宙狗凶神恶煞 xff0c 但是宇宙狗有一 个很可爱的女朋友 最近 xff0c 他的女朋友得到了一些数 xff0c 同时 xff0c 她还很喜欢树 xff0c 所以
  • Qt 线程池的使用

    文章目录 Qt 线程池的使用1 Qt 线程池的原理2 QRunnable3 QThreadPool Qt 线程池的使用 1 Qt 线程池的原理 我们使用线程的时候就去创建一个线程 xff0c 这样实现起来非常简便 xff0c 但是就会有一个
  • Bat文件的创建及其命令大全

    Bat文件的创建及其命令大全 一 bat文件的创建 新建txt文本文件 向文本文件中输入命令 保存并修改文本文件后缀为 bat 双击保存后的bat文件 xff0c 运行 二 bat命令大全 echo 和 64 64 span class t
  • [bat] 通过bat脚本配置系统环境变量

    bat 通过bat脚本配置系统环境变量 本文介绍使用bat脚本添加系统环境变量 添加PATH环境变量 添加PATH环境变量 xff0c 如果已经存在则不添加 介绍2种方法来循环搜索路径是否已经存在 xff1a 64 echo off spa
  • 【Python】python之subprocess模块详解

    Python python之subprocess模块详解 subprocess模块 subprocess是Python 2 4中新增的一个模块 xff0c 它允许你生成新的进程 xff0c 连接到它们的 input output error
  • 【gTest】gtest简介及简单使用

    gTest gtest简介及简单使用 gtest是一个跨平台 Liunx Mac OS X Windows Cygwin Windows CE and Symbian 的C 43 43 测试框架 xff0c 有google公司发布 gtes
  • 【Python】多进程 AttributeError: Can‘t pickle local object

    Python 多进程 AttributeError Can t pickle local object 最近写了一个在电脑磁盘搜索全部文件的的一个小程序 xff0c 效果达到了 xff0c 但是效率5 6分钟 xff0c 效率是十分的不理想
  • 【QT】自定义事件 QCustomEvent

    QT 自定义事件 一 自定义事件的优势 尽管 Qt 已经提供了很多事件 xff0c 但对于更加千变万化的需求来说 xff0c 有限的事件都是不够的 例如 xff0c 我要支持一种新的设备 xff0c 这个设备提供一种崭新的交互方式 xff0
  • 【QT】Qt学习之资源文件(qrc)的添加以及使用

    QT Qt学习之资源文件 xff08 qrc xff09 的添加以及使用 前言 当Qt工程打包好发给他人使用时可能会出现一些图片不显示或者一张图片都加载不出来情况 xff0c 那么可能就是他人的电脑没有这些图片资源 xff0c 或者源程序加
  • 【VS】VS、ReSharper 设置修改代码颜色、提高代码辨识度!附VS超实用快捷!

    VS VS ReSharper 设置修改代码颜色 提高代码辨识度 xff01 附VS超实用快捷 xff01 最终效果 xff1a 色彩由自己定义 可一眼辨识出哪些是变量 常量 方法 字符串等 xff0c 非常强大 方便 xff01 1 In
  • 【QT】 Qt高级——Qt自定义标题栏

    QT Qt高级 Qt自定义标题栏 一 Qt自定义标题栏简介 QWidget及其子类窗体组件的标题栏受操作系统的控制 xff0c 即标题栏的界面风格与操作系统的主题风格相同 xff0c 工程实践中需要开发者自行定义 xff0c 达到美化应用程
  • 第四次月模拟题-201809-3

    题目分析 xff1a 本题很绕 xff0c 但是关键的部分非常简洁 xff0c 实际上就是对应的查找字符而已 xff0c 只不过复杂一点的是可能会有分级 xff0c 这样我们就要用一个树结构来储存 xff0c 首先我们先要定义一个结构题 x