洛谷 P3065 [USACO12DEC] First! G

news2025/1/11 12:52:14

原题点这里​​​​​​

题目来源于:洛谷

题目本质:字符串,Hash,字典树Trie

题目思路:

因为涉及到字典序的问题,那么应该能想到字典树。很显然字符串s1如果比字符串s2的字典序小的话,只有两种情况,s1是s2的前缀;以及他们有相同的前缀单在相同前缀后面的部分那一部分s1的优先级更大;所以将所以字符串建成一棵字典树,然后再在字典树上遍历每一串字符串,如果有字符串已经是他的前缀,无论怎么改变26个字母的排列也无济于事,否则判断优先级,及上一段所说的情况二;字符串s1 为 mma 字符串s2 为 mmb。现在要使mmb的优先级大于mma的优先级,他们都有相同的mm前缀,那么要使s2的优先级大,就要使b的优先级大,及相同前缀后面部分的优先级大,跟之前所说的一样。使用括朴排序。构造这样的图,此时a,b在拓扑排序后的顺序是在同一层的,所以可以瞎把a,b交换位置都可以,故可以将a,b交换位置使得s2的优先级大于s1;无法构成拓扑序,因为a,b无论怎么交换位置,mmab都在mmba前面。

代码如下:

#include<bits/stdc++.h>
using namespace std;
struct Node {
	int son[27], end;
} N[300010];
vector<int> E[27];
int n, cnt = 1, ind[30010], ans_sum, used[27][27];
string ans[30010], s[30010];
void insert(string s) {
	int now = 1;
	for (int i = 0; i < s.length(); i++) {
		if (!N[now].son[s[i] - 'a']) N[now].son[s[i] - 'a'] = ++cnt;
		now = N[now].son[s[i] - 'a'];
	}
	N[now].end++;
}
int work(string s) {
	int now = 1;
	for (int i = 0; i < s.length(); i++) {
		int t = s[i] - 'a';
		if (N[now].end) return 0;
		for (int j = 0; j < 26; j++) {
			if (N[now].son[j] && t != j) {
				E[t].push_back(j);
				ind[j]++;
			}
		}
		now = N[now].son[t];
	}
	return 1;
}
int check() {
	queue<int> q;
	for (int i = 0; i < 26; i++) if (!ind[i]) q.push(i);
	while (!q.empty()) {
		int u = q.front();
		q.pop();
		for (int i = 0; i < E[u].size(); i++) {
			ind[E[u][i]]--;
			if (!ind[E[u][i]]) q.push(E[u][i]);
		}
	}
	for (int i = 0; i < 26; i++) if (ind[i]) return 0;
	return 1;
}
int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		cin >> s[i];
		insert(s[i]);//建字典树
	}
	for (int i = 1; i <= n; i++) {
		memset(used, 0, sizeof(used));
		memset(ind, 0, sizeof(ind));
		for (int j = 0; j < 27; j++) E[j].clear();
		if (!work(s[i])) continue; //如果有人是它的前缀返回0,直接不干了,如果没有,顺便建好图,准备接下来拓扑排序
		if (check()) ans[++ans_sum] = s[i]; //如果符合拓扑序 记录答案
	}
	printf("%d\n", ans_sum);
	for (int i = 1; i <= ans_sum; i++) cout << ans[i] << endl;
	return 0;
}

题解参考于:题解 P3065 【[USACO12DEC]第一!First!】 - 洛谷专栏 (luogu.com.cn)

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

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

相关文章

sms4j 发送短信

一、使用介绍 技术介绍&#xff1a; SMS4J: 短信 支持 阿里云 腾讯云 云片 等等各式各样的短信服务商 项目地址&#xff1a; SMS4J: 让简单的事情回归简单的本质。 SMS4J为短信聚合框架&#xff0c;帮您轻松集成多家短信服务&#xff0c;解决接入多个短信SDK的繁琐流程。 目前已…

8招教你轻松解决职场甩锅PUA!

你是不是四十岁了还不知道解决职场甩锅行为也是有公式的&#xff01; 那些混得好&#xff0c;能轻松赢得领导赏识&#xff0c;快速升职的&#xff0c;都 是早就把这些技巧背的滚瓜烂熟&#xff01; 比如&#xff1a; 1、同事的错&#xff0c;领导误会是你 错误话术 这不是…

【Linux】在Windows搭建WSL2开发环境

在Windows搭建WSL2开发环境 WSL安装和调整更改安装位置变更默认apt源 Python环境变更默认Python版本安装pip WSL安装和调整 这里使用的WSL2&#xff0c;Ubuntu22.04 如果在WSL中需要使用系统代理但是报以下的错&#xff1a; 在当前Windows用户目录下创建.wslconfig并写入以下配…

网络工程师考试真题及解析

1. 在不同类型的操作系统中&#xff0c;批处理操作系统的缺点是&#xff08;&#xff09;。 A) 缺少交互性 B) 不能并发运行 C) CPU利用率低 D) 周转时间太长 A【解析】批处理操作系统的优点是作业流程自动化较高&#xff0c;资源利用率较高&#xff0c;作业吞吐量大&…

word文档无损原样转pdf在windows平台使用python调用win32com使用pip安装pywin32

前提&#xff1a; windows环境下&#xff0c;并且安装了office套装&#xff0c;比如word,如果需要调用excel.也需要安装。在另外的文章会介绍。这种是直接调用word的。所以还原度会比较高。 需求&#xff1a; word文档转pdf,要求使用命令行形式&#xff0c;最终发布为api接口…

1992-2022年各省市县夜间灯光数据(excel+shp格式)

1992-2022年各省市县夜间灯光数据&#xff08;excelshp格式&#xff09; 1、时间&#xff1a;1992-2022年 2、来源&#xff1a; DMSP-OLS、NPP-VIIRS 3、指标&#xff1a;均值、总和、最小值、最大值、标准差 4、范围&#xff1a;34省市&#xff08;含港澳台&#xff09;、…

learn C++ NO.16——模板

typename关键字 typename是一个c关键字&#xff0c;主要用于解决模板定义中的依赖类型名称的解析问题。它告诉编译器紧随其后的名称是一个类型&#xff0c;而不是静态成员或成员函数。在模板编程中正确使用typename是理解和编写复杂模板代码的关键。 那什么是模板定义中的依赖…

聚鼎装饰画:做一家装饰画店铺能不能赚钱呢

在当今这个快节奏、高压力的社会环境中&#xff0c;人们越来越渴望在繁忙的生活中找到一丝宁静与美感。装饰画&#xff0c;作为提升居家和办公环境品位的艺术品&#xff0c;其市场需求日益增长。那么&#xff0c;做一家装饰画店铺究竟能不能赚钱呢? 从市场需求的角度来看&…

Codeforces practice /C++ 2024/9/11 - 2024/9/13

D. Mathematical Problem Codeforces Round 954 (Div. 3) 原题链接&#xff1a;https://codeforces.com/contest/1986/problem/D 题目标签分类&#xff1a;brute force&#xff0c;dp&#xff0c;greedy&#xff0c;implementation&#xff0c;math&#xff0c;two pointers…

深度学习经典模型之T5

T5(Text-to-Text Transfer Transformer) 是继BERT之后Google的又外力作&#xff0c;它是一个文本到文本迁移的基于Transformer的NLP模型&#xff0c;通过将 所有任务统一视为一个输入文本并输出到文本(Text-to-Text)中&#xff0c;即将任务嵌入在输入文本中&#xff0c;用文本的…

element ui form 表单出现英文提示的解决方案

场景再现&#xff1a; 在使用 form 表单的时候&#xff0c;一般都需要对表单元素进行验证&#xff0c;错误就出现在了这里&#xff0c;除了配置的错误信息&#xff0c;还会出现一个 英文校验提示&#xff0c;如下图&#xff1a; 解决方案 出现的原因是在el-form-item中使用…

推动数据治理与传统产业深度融合:解锁产业升级新引擎

标题&#xff1a;推动数据治理与传统产业深度融合&#xff1a;解锁产业升级新引擎 在数字化浪潮席卷全球的今天&#xff0c;数据已成为驱动经济社会发展的关键生产要素。传统产业&#xff0c;作为国民经济的基石&#xff0c;正面临着前所未有的变革挑战与转型升级的机遇。数据…

SVN的使用技巧

SVN&#xff08;Subversion&#xff09;是近年来崛起的版本管理工具&#xff0c;因为是免费的&#xff0c;所以用的人还是不少的。故做一些总结。 如果是新手&#xff0c;基本对SVN一点都不了解的话&#xff0c;建议去学习一下这个系统的教程&#xff0c;讲的也很详细Tortoise…

腾讯发布大模型安全与伦理报告:以负责任AI引领大模型创新

前言 随着AI模型的能力日益更加强大&#xff0c;如何让其行为和目的跟人类的价值、偏好、伦理原则、真实意图之间实现协调一致&#xff0c;这个被称为人机价值对齐的问题变得越来越重要。价值对齐对于确保人类与人工智能协作过程中的信任与安全至关重要&#xff0c;已经成为AI…

今年的智能手机不仅仅是AI

周一&#xff0c;苹果揭开了其iPhone 16系列的面纱&#xff0c;主要卖点是苹果智能。苹果的设备内AI系统提供了许多引人注目的功能&#xff0c;比如重写电子邮件、生成自定义表情符号和大幅升级的Siri。但在这些表面之下&#xff0c;AI为iPhone带来的还有一个重大变化&#xff…

使用API有效率地管理Dynadot域名,查看域名服务器(NS)信息

前言 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…

js 深入理解生成器

目录 概述1 . 生成器基础2. 与普通函数的区别3. 通过 yield 中断执行3.1 yield 是干嘛的&#xff1f;3.2 yield 和 return 的区别3.3 每个生成器对象作用域都是独立的3.4 yeild 的使用位置3.5 生成器对象作为可迭代对象3.6 使用 yield 实现输入和输出3.6.1 yield实现输入3.6.1 …

【原创】java+swing+mysql长途客车售票管理系统设计与实现

个人主页&#xff1a;程序员杨工 个人简介&#xff1a;从事软件开发多年&#xff0c;前后端均有涉猎&#xff0c;具有丰富的开发经验 博客内容&#xff1a;全栈开发&#xff0c;分享Java、Python、Php、小程序、前后端、数据库经验和实战 文末有本人名片&#xff0c;希望和大家…

【双语新闻】 AI 安全新闻 :计算规模的下一代,按越狱敏感性和机器道德对模型进行排名

计算规模的下一代 The Next Generation of Compute Scale AI开发正处在计算规模大幅扩展的边缘。从芯片制造到电力基础设施的最新发展&#xff0c;都指向一个未来&#xff0c;即人工智能模型可能会超过今天最大的系统。在这篇文章中&#xff0c;我们将审视关键的发展以及它们对…

Grafana 汉化

点击 Home -> Administration 点击 Default preferences 点击 中文&#xff08;简体&#xff09;后点击 Save 即可