【全网首发】2023年NOIP T1词典详解

news2024/12/23 17:26:31

目录

前言

题目详解

AC代码

结尾 


前言

NOIP的第一题我终于终于过了!

还是很激动的,所以想把自己的思路和想法写下来供大家参考。

题目详解

首先还没看过题的小伙伴,请看题:

一道题拿来还是得先理解题目。而这道题简单来说就是能否通过若干次交换字母后,使得目标单词i的字典序最小。如果可能,输出1,否则输出0。 

因为每个单词里的字母都可以任意交换若干次,其实相当于只要包含这几个字母,怎么排列都行

比如我们对hello这个单词进行若干次交换:

helol

hleol

lheol

lhoel

lhleo

……

知道了这个性质,我们再仔细想想,要想目标单词i的字典序最小,那么其他单词的字典序就要尽可能的大。那我们直接预处理每个字符串的最小字典序和最大字典序,然后依次比较不就OK了吗?但是,仔细想想,时间不允许啊,如果按这种做法只能拿80分。

那是不是就没办法了呢?我们很容易想到的就是利用桶排序。怎么做呢?我们可以把每个单词里26个英文字母出现的次数,放入一个桶里,然后从前往后便利目标单词,从后往前便利对比单词,如果目标单词一但有比对比单词大的字母,直接输出0,break一下。比如下面的栗子:

目标单词:hello   对比单词:world

hello的桶:  0 0 0 0 1 0 0 1 0 0 0 2 0 0 1 0 0 0 0 0 0 0 0 0 0 0

world的桶: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 0

hello从前往后的第一个为真的位置:第5个

wolrd从后往前的第一个为真的位置:第23个

因为5<23,所以可以完成,输出1。

哇塞!这种方法真的很巧妙,但是算一算复杂度,也只能拿90分,呜呜呜。

于是作者绞尽脑汁,想了半天,总算想到了一个AC解法。

因为要想目标单词的字典序尽量的小,那么目标单词中最小的一个字母必定排在最前面

而要想对比单词的字典序尽量的大,那么对比单词中最大的一个字母必定排在最前面。

这样只需比较最前面的两个字母就OK了,两个字母不一样很好比较,难点就在于万一开头两个字母一样那该怎么办呢?
大家不要着急,静下心来仔细想想,因为目标单词是递增排列的,而对比单词是递减排列的。

我们假设第一个字母为X,那么目标单词的第二个字母一定是>=x,而对比单词的第二个字母一定是<=x。那么目标单词一定是大于对比单词的。这时就会有细心的同学问了,那如果一直等于x,不就没法比较了吗?那请你仔细读读题:

如果你还没有读懂,那请再读一遍:
 现在明白了吧,那这题不就轻轻松松了吗? 

AC代码

#include<bits/stdc++.h>
using namespace std;
int n,m,minn[3500],maxn[3500];
char s[3500]; 
int main()
{
	cin>>n>>m; 
	for(int i=1;i<=n;i++) 
	{
		scanf("%s",s);
		minn[i]=maxn[i]=s[0]-'a';
		for(int j=1;j<m;j++)
		{
			minn[i]=min(minn[i],s[j]-'a');
			maxn[i]=max(maxn[i],s[j]-'a');
		}
	}
	for(int i=1;i<=n;i++)
	{
		bool flag=1;
		for(int j=1;j<=n;j++)
		{
			if(i!=j&&maxn[j]<=minn[i])
			{
				flag=0;
				cout<<"0";
				break;
			}
		} 
		if(flag) cout<<"1";
	}
	return 0;
} 

结尾 

这篇文章应该不能再详细了吧。哪里还没听懂,欢迎私信。

最后祝大家RP++!

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

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

相关文章

超详细的Python+requests+unittest+excel接口自动化测试框架教程

一、框架结构 工程目录 在这我也准备了一份软件测试视频教程&#xff08;含接口、自动化、性能等&#xff09;&#xff0c;需要的可以直接在下方观看&#xff0c;或者直接关注VX公众号&#xff1a;互联网杂货铺&#xff0c;免费领取 软件测试视频教程观看处&#xff1a; 软件测…

二开的基础资料设置 为辅助核算项目的两种方式

一、第一种 自己插入相关表数据 T_BD_AsstActType //辅助核算项目表 insert into T_BD_AsstActType(FID, FName_L1, FName_L2, FName_L3, FNumber, FDescription_L1, FDescription_L2, FDescription_L3, FSimpleName, FAssistantType, FIsSelfAsstActaiatem, FIsSystemA…

如何评估一个论坛或峰会值不值得参加?

现在的论坛和峰会非常多&#xff0c;且都宣传的非常高端&#xff0c;很多人为了不错过机会像赶场一样总在参会路上。但究竟什么样的论坛或峰会才值得一去呢&#xff1f; 评估一个论坛或峰会是否值得参加&#xff0c;需要考虑多个因素。 1、主题与你的兴趣或职业相关性&#xf…

接口自动化测试是个啥?如何开始?什么是框架?带你揭开神秘面纱

自动化测试 自动化测试&#xff0c;这几年行业内的热词&#xff0c;也是测试人员进阶的必备技能&#xff0c;更是软件测试未来发展的趋势。 特别是在敏捷模式下&#xff0c;产品迭代速度快&#xff0c;市场不断调整&#xff0c;客户需求不断变化&#xff0c;单纯的手工测试越…

十大排序之选择排序(详解)

文章目录 &#x1f412;个人主页&#x1f3c5;算法思维框架&#x1f4d6;前言&#xff1a; &#x1f380;选择排序 时间复杂度O(n^2)&#x1f387;1. 算法步骤思想&#x1f387;2.动画实现&#x1f387; 3.代码实现 &#x1f412;个人主页 &#x1f3c5;算法思维框架 &#x1f…

华为ensp:trunk链路

当我们使用trunk链路后&#xff0c;还要选择要放行的vlan那就是全部vlan&#xff08;all&#xff09;&#xff0c;但是all并不包括vlan1&#xff0c;所以我们的trunk链路中的all不对all进行放行 实现相同vlan之间的通信 先将他们加入对应的vlan lsw1 进入e0/0/3接口 interfa…

随机生成字母

目录 css代码 html代码 js代码 css代码 .box {width: 400px;height: 400px;background-color: #797979;margin: 100px auto;padding-top: 100px;}.text{width: 200px;height: 50px;outline: none;border: 5px solid #545454;background-color: #797979;border-radius: 10px;f…

【数据分享】我国12.5米分辨率的山体阴影数据(免费获取)

地形数据&#xff0c;也叫DEM数据&#xff0c;是我们在各项研究中最常使用的数据之一。之前我们分享过源于NASA地球科学数据网站发布的12.5米分辨率DEM地形数据&#xff0c;这个DEM数据的优点是精度高&#xff01;基于该数据我们处理得到12.5米分辨率的坡度数据&#xff08;以上…

软件测试 | MySQL 主键约束详解:保障数据完整性与性能优化

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

pcl+vtk(十二)使用vtkPolyData创建点、线、面(不规则面)、三角带

一、前言 vtkPlaneSource创建平面&#xff0c;只可以创建平行四边形的平面&#xff0c;根据一个起点和两个终点创建法向量创建平面。但是当有创建多个点围成不规则平面的需求时&#xff0c;该怎么创建显示呢&#xff1f; 在网上查了资料&#xff0c;可以使用vtkPolyData拓扑结…

Linux-Ubuntu环境下搭建SVN服务器

Linux-Ubuntu环境下搭建SVN服务器 一、背景二、前置工作2.1确定IP地址保持不变2.2关闭防火墙 三、安装SVN服务器四、修改SVN服务器版本库目录五、调整SVN配置5.1查看需要修改的配置文件5.2修改svnserve.conf文件5.3修改passwd文件&#xff0c;添加账号和密码&#xff08;window…

各种工具的快捷键或命令

前言 这里就存放自己存有的一些小工具的地址以及工具的命令。 正文 零、各种小工具 1、wizTree:磁盘分析工具-分析磁盘的文件夹存储 2、稻壳阅读器&#xff1a;有黑色背景 3、youtube 视频下载&#xff1a;https://zh.savefrom.net/226/ 4、视频录制&#xff1a;Bandica…

lv11 嵌入式开发 GPIO实验 9

目录 1 简介 1.1 GPIO 2 LED实验步骤 2.1 通过电路原理图分析LED的控制逻辑 2.2 通过电路原理图查找LED与Exynos4412的连接关系 2.3 通过数据手册分析GPIO中哪些寄存器可以控制LED 2.4 通过程序去操控对应的寄存器完成对LED的控制 2.4.1 使用寄存器写入…

基于51单片机的交通信号灯系统【程序+proteus仿真+参考论文+AD原理图等16个文件夹资料】

一、项目功能简介 整个设计系统由STC89C52单片机数码管显示模块LED指向灯模块三线八线译码器模块按键模块组成。 具体功能&#xff1a; 1、东西向、南北向依次进行周期通行&#xff0c;默认设置为&#xff1a;东西向直行&#xff08;绿灯&#xff09;时间30秒&#xff0c;左转…

案例精选|聚铭网络流量智能分析审计系统加强南京市溧水区人社局信息安全防护能力

一字排开的社保综合服务窗口、实时滚动的数“智”人社大屏、便捷快速的社保卡自助服务机……每位到溧水市民中心人社大厅进行业务办理的市民对高效的社保服务经办效率赞叹不已。 党的二十大报告提出&#xff0c;健全覆盖全民、统筹城乡、公平统一、安全规范、可持续的多层次社…

AI和人工智能与机器学习全景报告

今天分享的是AI系列深度研究报告&#xff1a;《AI和人工智能与机器学习全景报告》。 &#xff08;报告出品方&#xff1a;appen&#xff09; 报告共计&#xff1a;30页 获取 数据获取仍是AI应用构建团队的主要瓶颈。 原因各不相同。例如&#xff0c;特定用例的数据可能不足…

【数据结构】树与二叉树(廿三):树和森林的遍历——层次遍历(LevelOrder)

文章目录 5.3.1 树的存储结构5. 左儿子右兄弟链接结构 5.3.2 获取结点的算法5.3.3 树和森林的遍历1. 先根遍历&#xff08;递归、非递归&#xff09;2. 后根遍历&#xff08;递归、非递归&#xff09;3. 森林的遍历4. 层次遍历a. 算法LevelOrderb. 算法解读c. 时间复杂度d.代码…

试写一算法将两个递增有序的带头结点的单链表合并为一个递增有序的带头结点的单链表。(利用原表结点空间)

试写一算法将两个递增有序的带头结点的单链表合并为一个递增有序的带头结点的单链表。 &#xff08;利用原表结点空间&#xff09; 比如现在要将下面两个链表合并&#xff0c;这里是要求利用原表空间 我们先创建一个辅助的链表L3&#xff0c;用p和q分别标记L1和L2的数据元素&…

macOS unlocker 4.0.5 for VMware ESXi 7.0

正文共&#xff1a;555 字 6 图&#xff0c;预估阅读时间&#xff1a;1 分钟 我们前面在macOS上已经折腾了好久了&#xff0c;包括黑苹果的安装&#xff08;老树发新芽&#xff0c;ACER TM4750G装黑苹果&#xff09;、macOS的安装&#xff08;VMware ESXI部署macOS&#xff08…

【React】打包体积分析 source-map-explorer

通过分析打包体积&#xff0c;才能知道项目中的哪部分内容体积过大&#xff0c;方便知道哪些包需要进一步优化。 使用步骤 安装分析打包体积的包&#xff1a;npm i source-map-explorer在 package.json 中的 scripts 标签中&#xff0c;添加分析打包体积的命令对项目打包&…