当前位置: 首页 > news >正文

csp信奥赛C++高频考点专项训练之字符串 --【字符串排序】:字符排序

csp信奥赛C++高频考点专项训练之字符串 --【字符串排序】:字符排序

题目描述

小杨有n nn个仅包含小写字母的字符串s 1 , s 2 , … , s n s_1,s_2,\ldots,s_ns1,s2,,sn,小杨想将这些字符串按一定顺序排列后拼接到一起构成字符串t tt。小杨希望最后构成的字符串t tt满足:

  • 假设t i t_iti为字符串t tt的第i ii个字符,对于所有的j < i j\lt ij<i均有t j ≤ t i t_j\le t_itjti。两个字符的大小关系与其在字母表中的顺序一致,例如e < g < p < s \texttt{e}\lt \texttt{g}\lt \texttt{p} \lt \texttt{s}e<g<p<s

小杨想知道是否存在满足条件的字符串排列顺序。

输入格式

第一行包含一个正整数T TT,代表测试数据组数。

对于每组测试数据,第一行包含一个正整数n nn,含义如题面所示。

之后n nn行,每行包含一个字符串s i s_isi

输出格式

对于每组测试数据,如果存在满足条件的排列顺序,输出(一行一个)1 \texttt{1}1,否则输出(一行一个)0 \texttt{0}0

输入输出样例 #1
输入 #1
3 3 aa ac de 2 aac bc 1 gesp
输出 #1
1 0 0
说明/提示
样例解释

对于第一组测试数据,一种可行的排列顺序为aa + ac + de \texttt{aa}+\texttt{ac}+\texttt{de}aa+ac+de,构成的字符串t ttaaacde \texttt{aaacde}aaacde,满足条件。

对于全部数据,保证有1 ≤ T , n ≤ 100 1\le T,n\le 1001T,n100,每个字符串的长度不超过10 1010

思路分析

  1. 核心想法:如果存在一种排列使得拼接后的字符串t非递减,那么将原字符串数组按字典序升序排序后,直接拼接得到的字符串一定也满足非递减性质。因此只需要检查字典序排序后的拼接结果。
  2. 判断方法:将排序后的字符串数组拼接成t,再将t的所有字符升序排序得到t2。如果t == t2,说明原字符串本身已经非递减,输出1;否则输出0

代码实现

#include<bits/stdc++.h>usingnamespacestd;intt,n;// t:测试组数, n:每组字符串个数boolcheck(string s[]){// 判断是否存在合法排列// 对字符串数组按字典序升序排序(下标1~n)sort(s+1,s+n+1);// 将排序后的字符串依次拼接string t="";for(inti=1;i<=n;i++){t+=s[i];}// 复制原拼接串,准备排序string t2=t;// 对拼接串的字符升序排序sort(t.begin(),t.end());// 若排序后的字符串与原串相等,说明原串已经非递减if(t==t2)returntrue;elsereturnfalse;}intmain(){cin>>t;// 读入测试组数while(t--){cin>>n;// 读入当前组字符串个数string s[110];// 存储字符串,下标从1开始for(inti=1;i<=n;i++){cin>>s[i];}if(check(s))cout<<1<<endl;elsecout<<0<<endl;}return0;}

功能分析

该程序的功能是:对于每组测试数据,判断是否存在一种将给定字符串排列并拼接的方式,使得最终得到的大字符串t的字符序列是非递减的(即每个字符都不小于前一个字符)。

实现步骤

  1. 读入测试组数t
  2. 对每组数据:
    • 读入nn个字符串。
    • 调用check函数:
      • 将字符串数组按字典序升序排序。
      • 将排序后的字符串依次拼接成一个大字符串t
      • t的所有字符进行升序排序得到t2
      • t == t2则返回true,否则false
    • 根据返回值输出10

算法时间复杂度:每组数据排序字符串 O(n log n × L),L 为字符串平均长度(≤10),字符排序 O(|t| log |t|),其中 |t| ≤ n×10 ≤ 1000。


【完整系列请查看专栏】:
信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:
https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转


各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}

【秘籍汇总】(完整csp信奥赛C++学习资料):

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

https://edu.csdn.net/course/detail/41081 点击跳转

3、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转

4、csp信奥赛冲刺一等奖有效刷题题解:

信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:
https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

信奥赛C++提高组csp-j初赛&复赛真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转

5、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转


GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}
http://www.jsqmd.com/news/795868/

相关文章:

  • 【信息科学与工程学】【数据科学】第四十九篇 Apache Hive 的函数0
  • FanControl终极指南:免费开源的Windows风扇智能控制软件
  • 终极Visual C++运行库修复指南:一劳永逸解决Windows软件兼容性问题
  • 在OpenClaw项目中集成Taotoken作为Agent模型供应商的实践
  • 3天搞定中文API大全:从菜鸟到高手的完整指南
  • 喜马拉雅音频下载技术重构:Go+Qt5混合架构的3大创新突破
  • S7-1200 PLC编程避坑指南:从振荡电路到浮点数计算,新手最容易犯的5个错误
  • 【审计专栏】招投标领域人工智能审计-01-算法的基础参数篇
  • 3步轻松实现AI智能图像分层:PSD自动生成终极指南
  • AI原生差分隐私落地难?2026奇点大会披露3类GPU加速噪声注入架构及TensorFlow/PyTorch原生适配代码
  • 告别本地安装!SAP顾问必看:手把手教你配置SICF并获取WEBGUI登录URL(含hosts文件修改)
  • 树状数组和线段树专题题解逆序对、区间异或、数线段差分、RMQ、最长连续交替子串、时间轴线段树
  • 终极FanControl中文使用指南:5分钟让你的Windows风扇控制更智能
  • m4s-converter终极指南:5秒解锁B站缓存视频,永久保存你的数字资产
  • 拆解OpenWrt的.ipk安装包:从文件结构到手动安装,彻底搞懂opkg底层逻辑
  • FanControl终极指南:如何在5分钟内解决Windows风扇控制难题
  • 告别会议室回音:用Python和WPE算法给你的语音识别模型做个‘降噪SPA’
  • 为什么Bebas Neue字体能成为设计师的终极免费选择?
  • QKeyMapper终极指南:免费实现键盘鼠标手柄全能映射的完整教程
  • 基于共识的捆绑算法(CBBA)的多智能体多任务分配问题——远程太空船交会和维修的 RPO 规划任务研究(Matlab代码实现)
  • 告别I2C的龟速:用STM32的SPI接口榨干ICM20948的性能(实测对比与配置优化)
  • Python基础 - 列表的创建 字面量与list函数的使用技巧
  • 从CANdb++到Matlab工作区:汽车工程师的DBC文件数据流转实战(以R2023b为例)
  • 终极ViGEmBus驱动指南:如何让Windows完美识别任何游戏控制器
  • C++ 左值和右值 —— 奇牛+Gemini
  • 基于HCNR200/201的高精度模拟信号隔离电路设计与实践
  • Docker镜像构建进化论:从手工操作到多阶段构建的实战指南
  • PostgreSQL数据清洗实战:用string_agg合并地址字段,我这样整理混乱的客户信息
  • 【赵渝强老师】金仓数据库的运行日志文件
  • 5步精通League Akari:高效解锁英雄联盟LCU工具箱的完整指南