程序设计天梯赛:千手观音

题目大意:给n个字符串,字符串表达的是一种特殊的数字,例如说as.asf.wad,就是三位数,从左到右分别为高位到地位。n个字符串按照递增序列给出,递增的比较规则和数字相同。要求求出来这些特殊数字的相对大小,从小到大排序,无法判断大小就按字典序升序排列。

思路:

1.可以想到只有数位相同的比较才是有意义的例如5,24,不能确定5是否大于2。那么就可以想到需要记录当前字符串之前的字符串。

2.二个数位相同的数如果高位不同,那么之后的位数比较就是没有意义的,第一个不同的位置就是有效的相对大小。

3.根据人脑可以比较出这些特殊数位的相对大小,那么代码应该怎么比较?可以想到让低位的数字向高位数字建一条有向边,并且记录入度,使用拓扑排序来输出相对大小,题目要求的字典序可以使用优先队列来实现。

4.如果是数字建图很容易,但是给出的是一堆字符串,那么就可以使用map来标记当前字符串是否出现过,如果没有出现那么就给予一个数字编号。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+10;
ll h[N],e[N],ne[N],idx,ind[N];//建图
string sv[N];//用编号找字符串
unordered_map<string,ll> op;//给字符串建立编号
void add(ll a,ll b)
{e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);ll n;cin>>n;memset(h,-1,sizeof(h));ll cnt=1;vector<string> pre;//之前的字符串for(int i=1;i<=n;i++){vector<string> q;//当前的字符串string s;cin>>s;s=s+'.';//因为末尾需要一个特殊数位是以.结尾的ll wz=0;for(int j=0;j<s.size();j++){string v;if(s[j]=='.'){v=s.substr(j-wz,wz);//从j-wz开始,截取wz个字符wz=0;if(!op[v])//如果没有出现就给予字符串编号{sv[cnt]=v;//编号找字符串op[v]=cnt++;}q.push_back(v);}else wz++;}if(i==1)pre=q;//第一个字符串不能比较else {if(pre.size()==q.size()){for(int j=0;j<q.size();j++){if(pre[j]!=q[j])//第一位不同就是这次比较的有效大小数位{add(op[pre[j]],op[q[j]]);ind[op[q[j]]]++;break;}}}pre=q;}}priority_queue<string,vector<string>,greater<string>> kp;//满足题意的字典序for(auto &[x,y]:op){if(ind[y]==0)kp.push(x);}vector<string> ans;while(kp.size()){string s1=kp.top();kp.pop();ans.push_back(s1);for(ll i=h[op[s1]];~i;i=ne[i]){ll j=e[i];ind[j]--;if(ind[j]==0){kp.push(sv[j]);//编号找字符串}}}for(int i=0;i<ans.size();i++){if(i)cout<<'.';cout<<ans[i];}return 0;
}

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

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

相关文章

Springboot教程(六)——异常处理

拦截异常 在Spring Boot中&#xff0c;我们可以将异常统一放在全局处理类来处理&#xff0c;创建一个全局异常处理类需要用到ControllerAdvice和ExceptionHandler注解。 ControllerAdvice类似一个增强版的Controller&#xff0c;用于标注类&#xff0c;表示该类声明了整个项目…

嵌入式学习-FreeRTOS-Day3

嵌入式学习-FreeRTOS-Day3 一、思维导图 二、 1.FreeRTOS任务的调度算法及实现 默认是抢占式调度时间片轮询 1.抢占式调度&#xff1a;任务优先级高的可以打断任务优先级低的执行&#xff08;适用于不同优先级&#xff09; 2.时间片轮转&#xff1a;每一个任务拥有相同的时…

使用 Cypress 进行可视化回归测试:一种务实的方法

每次组件库 Picasso 发布新版本时&#xff0c;都会更新所有的前端应用程序&#xff0c;让绝大部分新功能能与整个平台的设计保持一致。上个月&#xff0c;推出了 Toptal Talent Portal 的 Picasso 更新&#xff0c;这是我们的用户用来找工作和与客户互动的平台。 已知了这个版本…

软考70-上午题-【面向对象技术2-UML】-UML中的图1

一、图的定义 图是一组元素的图形表示&#xff0c;大多数情况下把图画成顶点、弧的联通图。 顶点&#xff1a;代表事物&#xff1b; 弧&#xff1a;代表关系。 可以从不同的角度画图&#xff0c;UML提供了13种图&#xff1a;&#xff08;只看9种&#xff09; 类图&#xff…

数据结构实现

目录 一、线性表中顺序表的实现&#xff1a; 二、线性表的链式存储&#xff08;链表-带头节点&#xff09; 三、习题练习&#xff1a; 四、栈&#xff08;stack&#xff09; 五、循环队列 1.数组形式&#xff1a; 2.链表形式&#xff1a; 3.习题练习 六、二叉树 1.…

226. 翻转二叉树

代码实现&#xff1a; 方法1&#xff1a;先序遍历 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/// 交换左右子树 void swap(struct TreeNode *root) {struct TreeNode *l root…

代码随想录算法训练营第day11|20. 有效的括号、 1047. 删除字符串中的所有相邻重复项、 150. 逆波兰表达式求值

目录 a.20. 有效的括号 b.1047. 删除字符串中的所有相邻重复项 c.150. 逆波兰表达式求值 a.20. 有效的括号 题目链接 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足…

Linux grep

文章目录 1. 基本用法2.字符转义3.二进制文件查找4.打印目标字段的附近行4. 多条件过滤5. 目录中过滤——用于在文件夹中筛选/排除指定后缀文件6.反向过滤——用于筛选7.只输出匹配内容——用于统计8. 筛选出包含字段的文件9.正则匹配10.管道和grep11.grep和wc/uniq/sort的合用…

B端系统优化,可不是换个颜色和图标,看看与大厂系统的差距。

Hi&#xff0c;我是贝格前端工场&#xff0c;优化升级各类管理系统的界面和体验&#xff0c;是我们核心业务之一&#xff0c;欢迎老铁们评论点赞互动&#xff0c;有需求可以私信我们 一、不要被流于表面的需求描述迷惑。 很多人找我们优化系统界面&#xff0c;对需求总是轻描淡…

小白跟做江科大51单片机之AD/DA

1.看原理图找接口 2.看时序图编写读取数据代码 XPT2046.c代码 #include <REGX52.H> //引脚定义 sbit XPY2046_DINP3^4; sbit XPY2046_CSP3^5; sbit XPY2046_DCLKP3^6; sbit XPY2046_DOUTP3^7; unsigned int XPT2046_ReadAD(unsigned char Command) { unsigned char …

sqllab 11-22

11.有回显&#xff0c;单引号 首先判断是字符型还是数字型 通过order by 来获取字段数 方便后续union联合 注意这里mime表明了内容要进行url编码&#xff0c;测试3报错&#xff0c;2正常&#xff0c;所以有2列。 还需要判断显示位&#xff0c;因为只有显示位的数据才能被爆出…

DDD领域驱动设计

一、什么是领域驱动设计DDD 领域驱动设计&#xff08;Domain-Driven Design&#xff0c;DDD&#xff09;是一种软件开发方法论&#xff0c;它提出了一组关于如何设计和构建软件系统的原则和方法。 二、DDD的诞生是为了解决哪些问题 对复杂业务领域的理解不足&#xff1a;传统…

网络安全及信息安全常识

网络安全及信息安全常识 闻知&#xff1a;西安之地&#xff0c;借软件正版化&#xff0c;诈骗违法犯罪多有。本人自2008年10月&#xff0c;以劳动合同入职软件公司后&#xff0c;知至今日&#xff0c;普通百姓&#xff0c;电脑知识匮乏。因此&#xff0c;当此时&#xff0c;有前…

MySQL如何查询根据某一条件分组,再查询出每组数据中时间最早或最晚的数据

最近遇到个需求&#xff0c;需要先根据A条件进行分组&#xff0c;然后查询出每组数据中时间最近的一条数据&#xff0c;立马就写出了sql语句 select * from (select * from b_equipment_maintenance whereequipment_id in (.......)ORDER BY create_time desc ) a GROUP BY …

leetcode:反转链表II,用C++ 实现

反转链表 II 问题描述 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回反转后的链表。 C 实现 /*** Definition for singly-linked list.* struct ListNode {* int…

论文笔记:Efficient Bootstrapping for Confidential Transactions

EcoBoost: Efficient Bootstrapping for Confidential Transactions 设计了一种被称为EcoBoost的新方法&#xff0c;以提高支持机密交易的区块链的引导效率。具体来说&#xff0c;利用随机抽样来验证高概率保密交易的正确性。因此&#xff0c;与事务数量相比**&#xff0c;验证…

【FPGA】DDR3学习笔记(一)丨SDRAM原理详解

本篇文章包含的内容 一、DDR3简介1.1 DDR3 SDRAM概述1.2 SDRAM的基础结构 二、 SDRAM操作时序2.1 SDRAM操作指令2.2 模式寄存器&#xff08;LOAD MODE REGISTER&#xff09;2.3 SDRAM操作时序示例2.3.1 SDRAM初始化时序2.3.2 突发读时序2.3.3 随机读时序2.3.4 突发写时序2.3.5 …

Apache Paimon 使用之 Writing Tables

Writing Tables 1.插入语法 INSERT { INTO | OVERWRITE } table_identifier [ part_spec ] [ column_list ] { value_expr | query };part_spec&#xff1a;PARTITION ( partition_col_name partition_col_val [ , … ] ) column_list&#xff1a;(col_name1 [, column_nam…

Python学习笔记-Flask实现简单的抽奖程序(增加图片显示)

1.创建static文件夹,存放图片文件 2.hero列表数据更改为要抽奖的图片名 3.html中可以编写python语句,遍历hero列表内容渲染到表格中 4.在点击随机抽取后,可以获得名称,然后使用img标签,将获取的名称拼接到路径中 3.初始页面,访问127.0.0.1:5000/index 4.点击随机抽取后 5.py…

【面试题】mysql常见面试题及答案总结

事务中的ACID原则是什么? Mysql是如何实现或者保障ACID的? ACID原则是数据库事务管理中必须满足的四个基本属性&#xff0c;确保了数据库事务的可靠性和数据完整性。 简写全称解释实现A原子性&#xff08;Atomicity&#xff09;一个事务被视为一个不可分割的操作序列&#…