P2580 于是他错误的点名开始了

news2024/12/24 8:16:12

题目背景

XS中学化学竞赛组教练是一个酷爱炉石的人。

他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛 CON900)。

题目描述

这之后校长任命你为特派探员,每天记录他的点名。校长会提供化学竞赛学生的人数和名单,而你需要告诉校长他有没有点错名。(为什么不直接不让他玩炉石。)

输入格式

第一行一个整数 nn,表示班上人数。

接下来 nn 行,每行一个字符串表示其名字(互不相同,且只含小写字母,长度不超过 5050)。

第 n+2n+2 行一个整数 mm,表示教练报的名字个数。

接下来 mm 行,每行一个字符串表示教练报的名字(只含小写字母,且长度不超过 5050)。

输出格式

对于每个教练报的名字,输出一行。

如果该名字正确且是第一次出现,输出 OK,如果该名字错误,输出 WRONG,如果该名字正确但不是第一次出现,输出 REPEAT

输入输出样例

输入 #1复制

5  
a
b
c
ad
acd
3
a
a
e

输出 #1复制

OK
REPEAT
WRONG

说明/提示

  • 对于 40\%40% 的数据,n\le 1000n≤1000,m\le 2000m≤2000。
  • 对于 70\%70% 的数据,n\le 10^4n≤104,m\le 2\times 10^4m≤2×104。
  • 对于 100\%100% 的数据,n\le 10^4n≤104,m≤10^5m≤105。

\text{upd 2022.7.30}upd 2022.7.30:新增加一组 Hack 数据。

1.这是一道有关字典树的题目。

2.我们平时查字典就是这个案列,我们查英文字典时,会按照首字母,其次再是第二个字母去查,因此这个题目我们需要构建一棵树。

3.我们首先需要一个根节点(这是为了更好的使用)它。我们的每个节点基本都是这个:

4.然后next数组之所以开27是因为我们需要连接接下来的字母,是对于小写字母来的。

然后我们需要初始化

 

在结构体里面有一个isend值,该值是判断是否能构成一个单词。我们很可能遇到这种情况

名字分别是abc,但是他报的是a,答案是为wrong。

所以我们使用的时候 让 isend=1。

如果遇到新的我们就需要创建:

 

否则就是往下走:

C代码如下:

#include<stdio.h>
#include<malloc.h>

typedef struct node
{
	char ch;
	int isend;
	struct node *next[27];
}NODE;
NODE tree;

NODE csh(NODE *p)
{
	int i;
	for(i=0;i<27;i++)
	{
		p->next[i]=NULL;
	}
}

int n,m;
int fun(char name[])
{
	int i,k;
	NODE *p=&tree,*q;
	for(i=0;name[i];i++)
	{
		k=name[i]-'a';
		if((p->next[k])==NULL)
		{
			q=(NODE *)malloc(sizeof(NODE));
			csh(q);
			p->next[k]=q;
			q->ch=name[i];
			p=q;
		}
		else 
		{
			p=p->next[k];
		}	
	}
	p->isend=1;
}
int slove(char name[])
{
	int i,k;
	NODE *p=&tree;
	for(i=0;name[i];i++)
	{
		k=name[i]-'a';
		if(p==NULL||p->next[k]==NULL)
		{
			printf("WRONG\n");
			return 0;
		}
		if(name[i]==(p->next[k])->ch)
		{
			p=p->next[k];
		}
		else 
		{
			printf("WRONG\n");
			return 0;
		}
	}
	if(p->isend==1) 
	{
		printf("OK\n");
		p->isend++;
		return 0;
	}
	else if(p->isend)
	{
		printf("REPEAT\n");
		p->isend++;
		return 0;
	}
	printf("WRONG\n");
	return 0;
}
int main()
{
	int i;
	char name[55];
	csh(&tree);
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%s",name);
		fun(name);
	}
	scanf("%d",&m);
	for(i=0;i<m;i++)
	{
		scanf("%s",name);
		slove(name);
	}
	return 0;
}

 C++代码:

#include<iostream>
#include<bits/stdc++.h>

using namespace std;

struct node
{
	char ch;
	int isend;
	struct node *next[27];
};
node tree;

node csh(node *p)
{
	int i;
	for(i=0;i<27;i++)
	{
		p->next[i]=NULL;
	}
}

int n,m;
int fun(char name[])
{
	int i,k;
	node *p=&tree,*q;
	for(i=0;name[i];i++)
	{
		k=name[i]-'a';
		if((p->next[k])==NULL)
		{
			q=(node *)malloc(sizeof(node));
			csh(q);
			p->next[k]=q;
			q->ch=name[i];
			p=q;
		}
		else 
		{
			p=p->next[k];
		}	
	}
	p->isend=1;
}
int slove(char name[])
{
	int i,k;
	node *p=&tree;
	for(i=0;name[i];i++)
	{
		k=name[i]-'a';
		if(p==NULL||p->next[k]==NULL)
		{
			cout << "WRONG\n" ;
			return 0;
		}
		if(name[i]==(p->next[k])->ch)
		{
			p=p->next[k];
		}
		else 
		{
			cout << "WRONG\n" ;
			return 0;
		}
	}
	if(p->isend==1) 
	{
		cout << "OK\n" ;
		p->isend++;
		return 0;
	}
	else if(p->isend)
	{
		cout << "REPEAT\n" ;
		p->isend++;
		return 0;
	}
	cout << "WRONG\n" ;
	return 0;
}
int main()
{
	int i;
	char name[55];
	csh(&tree);
	cin >> n;
	for(i=0;i<n;i++)
	{
		cin >> name;
		fun(name);
	}
	scanf("%d",&m);
	for(i=0;i<m;i++)
	{
		cin >> name;
		slove(name);
	}
	return 0;
}

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

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

相关文章

范数的意义与计算方法(使用NumPy)

1. 范数的意义 范数可以简单的理解为“距离”。由于向量是既有大小又有方向的量&#xff0c;所以向量是不能直接比较大小的&#xff0c;但是范数提供了一种方法&#xff0c;可以将所有的向量转化为一个实数&#xff0c;然后就可以比较向量的大小了。&#xff08;注&#xff1a…

前端Vue和Element-UI配合后端接口进行数据交互

前言 本次用element-ui的table组件&#xff0c;简单案例演示下前后端数据交互。 前提声明&#xff1a;如果不知道如何在vue中引入element-ui&#xff0c;可以先看下这篇文章:Vue引入并使用Element-UI组件库的两种方式 静态页面 首先先写一个静态页面吧&#xff0c;数据都是…

《Linux运维实战:Centos7.6基于ansible一键离线部署redis6.2.8容器版之cluster集群》

一、部署背景 由于业务系统的特殊性&#xff0c;我们需要针对不同的客户环境部署redis cluster集群&#xff0c;由于大都数用户都是专网环境&#xff0c;无法使用外网&#xff0c;为了更便捷&#xff0c;高效的部署&#xff0c;针对业务系统的特性&#xff0c;我这边编写了基于…

采用模块化设计的轮腿式六足机器人

原创作者&#xff1a;王菡琪1、前言 1.1 背景及意义 近两个世纪以来&#xff0c;人类生产技术水平不断飞跃&#xff0c;人口数量也大幅增长&#xff0c;这是人类史上不曾有的盛景&#xff0c;但是这也同时对我们提出了全新的挑战&#xff0c;于是我们研发了各类机器&#xff…

ECS简单介绍

ECS 云服务器ECS (Elastic Compute Service)是一种可弹性伸缩的计算服务&#xff0c;降低IT成本&#xff0c;提升运维效率&#xff0c;更专注于核心业务创新。 定位&#xff1a;最基础的计算服务&#xff0c;ECS及其上装载的操作系统&#xff0c;通常用作应用程序的运行环境。…

聚类--常见的K-MEANS聚类,DBSCAN聚类方法介绍

聚类 1. 什么是聚类⁉️ ➡️ 聚类就是把相似的物品分到一组。例如苹果&#xff0c;橙子属于水果类&#xff0c;猫&#xff0c;狗属于动物类&#xff0c;聚类把具有相似属性的物品分到同一组。 ☕常见的两种监督问题 有监督问题&#xff1a;有标签学习&#xff0c;通过已知…

过线检测判断方向

过线检测时需要判断目标是从哪个方向经过的 L1向量&#xff1a;&#xff08;-1&#xff0c;-7&#xff09; L2向量&#xff1a;&#xff08;-5&#xff0c;0&#xff09; 叉乘&#xff1a;L1 X L2 (-1x0 - (-5 x -7)) 0 - 35 -35 点乘&#xff1a;L1 L2 -1 x -5 -7 x 0…

管道设计软件:PIPEDATA-PRO

PIPEDATA-PROPipedata-Pro 提高了管道设计的效率&#xff0c;减轻了查找管道信息的负担。它可以直观、轻松地检索最新的管道和设计数据。尺寸和重量单位可以设置为公制或美国惯用单位。 Pipedata-Pro 于 1996 年由 Zeataline Projects 推出&#xff0c;现在已遍布全球&#xff…

靶机测试DomDom笔记

靶机描述Back to the TopHow well do you understand PHP programs? How familiar are you with Linux misconfigurations? This image will cover advanced Web attacks, out of the box thinking and the latest security vulnerabilities.Please note that this is captur…

阿里云中MindOpt优化器在python中如何安装

文章目录1 背景2 目的3 Bug4 安装教程6 小丑竟是我自己1 背景 我需要本地下载安装使用阿里元的MindOpt&#xff0c;安装教程可以看官网说明文档&#xff08;方方面面都有&#xff0c;不过细节部分有点欠缺&#xff0c;可能会踩一些坑&#xff0c;但总体问题不大&#xff09;。…

盘点 | CES2023落幕!新能源车、显示技术、AI/元宇宙、芯片…百花齐放百家争鸣中……

美国时间1月8日&#xff0c;全球规模最大、水平最高、影响力最广泛的国际消费电子展&#xff08;CES 2023&#xff09;在美国拉斯维加斯闭幕。这场堪比科技“春晚”的消费电子盛宴以“技术如何应对世界上最大的挑战”为主题&#xff0c;来自全球170多个国家与地区的3200余家科技…

OpenResty(Nginx+Redis+Lua)实现缓存限流

OpenResty介绍 OpenResty(又称&#xff1a;ngx_openresty) 是一个基于 nginx的可伸缩的 Web 平台&#xff0c;由中国人章亦春发起&#xff0c;提供了很多高质量的第三方模块。 OpenResty 是一个强大的 Web 应用服务器&#xff0c;Web 开发人员可以使用 Lua 脚本语言调动 Ngin…

2013-2021年核心城市空气质量日度数据

2013-2021年核心城市空气质量日度数据 1、时间&#xff1a;2013年12月-2021年4月13日 2、城市包括&#xff1a;北京 上海 广州 深圳 杭州 天津 成都 南京 西安 武汉 3、指标&#xff1a;日期、AQI、范围、质量等级、PM2.5、PM10、SO2、CO、NO2、O3、城市 4、来源&#xff1…

MYSQL基础——DML语句

DML语句 DML英文全称是Data Manipulation Language(数据操作语言)&#xff0c;用来对数据库中表的数据进行增(INSERT)、删(DELETE)、改(UPDATE)操作。 接下来代码演示所用的数据表如下&#xff1a; desc employee; 添加 添加数据语法格式如下&#xff1a; # 给指定字段添加…

IEEE | DSConv: Efficient Convolution Operator

论文标题 &#xff1a;DSConv: Efficient Convolution Operator 论文链接 &#xff1a;https://arxiv.org/abs/1901.01928v2 发表时间 &#xff1a;2019年11月 创新点 实现更低的内存使用&#xff0c;并且加快了计算速度 概要 引入了一种称为 DSConv&#xff08;分布移位卷…

【服务器数据恢复】服务器卷被误删除的raid5数据恢复案例

服务器数据恢复环境&故障&#xff1a; 某品牌服务器&#xff0c;搭建raid5磁盘阵列。 用户误操作删除服务器上的卷。 经过检测发现服务器不存在物理故障&#xff0c;可以从raid5磁盘阵列层面进行数据恢复。 服务器数据恢复过程&#xff1a; 1、对故障服务器所有硬盘以只读…

Chromedriver安装教程【无需翻墙】

第一步 查看你当前Chrome浏览器的版本&#xff0c;如下图所示&#xff1a; 第二步 查看当前Chrome浏览器的版本号&#xff0c;如下图所示,版本 108.0.5359.125&#xff08;正式版本&#xff09; &#xff08;64 位&#xff09;中的&#xff0c;108就是我们的版本号。 第三…

第47讲:SQL优化之主键优化

文章目录1.主键优化方面的概念1.1.数据的组织方式1.2.主键顺序写入的过程1.3.主键乱序写入引发页分裂的现象1.4.页合并的概念2.主键的设计原则1.主键优化方面的概念 1.1.数据的组织方式 在InnoDB存储引擎中&#xff0c;表的数据都是根据主键顺序组织然后存放的&#xff0c;这…

集成开发工具IDEA导入新项目,update index时间过长

集成开发工具IDEA导入新项目&#xff0c;update index时间过长&#xff0c;一般这种场景出现在&#xff1a; 1.继承开发工具比较新&#xff08;使用了优化的索引算法&#xff0c;这种算法一般是前期编译比较慢&#xff0c;一旦编译完&#xff0c;存入缓存&#xff0c;后期搜索就…

为何国家应该大力推行IPV9而不是IPv6.md

不得不说,中国的发展突飞猛进,你看连神舟16号都已经提升了日程。 我们见证了中国的崛起,更见证了中国的力量,集中力量办大事的决心。 当然计算机网络体系也发生了很大的改变,从之前的IPv4到20年前的IPv6的提出,再到现在的IPV9技术的商业实施。 为何IPv6提出了20多年了,普及还是…