机试题——考古学家

server/2025/2/1 17:19:56/

题目描述

有一个考古学家发现一个石碑,但是很可惜,发现时其已经断成多段,原地发现n个断口整齐的石碑碎片。

为了破解石碑内容,考古学家希望有程序能帮忙计算复原后的石碑文字组合数,你能帮忙吗?

输入描述

第一行输入一个整数 n,表示石碑碎片的个数。

第二行输入n个字符串,表示n个石碑碎片的内容,每个字符串之间有空格。

输出描述

输出石碑文字的所有组合(按照升序排列),每个组合占一行。

如果存在石碑碎片内容完全相同,则由于碎片间的顺序变换不影响复原后的碑文内容,即相同碎片间的位置变换不影响组合。

用例输入

3 
a b c
abc 
acb 
bac 
bca 
cab 
cba
3 
a b a
aab 
aba 
baa
3 
a b ab
aabb 
abab 
abba 
baab 
baba

解题思路

  1. 输入数据处理

    • 读取输入的整数 nn 个碎片字符串。
  2. 排列生成

    • 使用 全排列 来生成所有碎片的排列组合。
    • 对碎片进行排序,确保排列是按字典序生成的。
  3. 去重

    • 利用 next_permutation 可以生成当前序列的下一个排列,确保不重复地生成所有排列。
  4. 输出处理

    • 将每一种排列的结果拼接成一个字符串,并将所有排列按照顺序输出。
  5. 实现技巧

    • 使用 next_permutation 生成排列,并通过排序保证结果按字典序排列。

代码

#include <iostream>
#include <vector>
#include <map>
#include <climits>
#include <algorithm>
using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n;cin >> n;vector<string> fragments(n);for (int i = 0; i < n; i++) {cin >> fragments[i];}// 对碎片进行排序,保证生成的排列是按字典序的sort(fragments.begin(), fragments.end());// 用来存储所有的排列结果vector<string> result;// 使用next_permutation生成所有排列do {string combined = "";for (int i = 0; i < n; i++) {combined += fragments[i];}result.push_back(combined);} while (next_permutation(fragments.begin(), fragments.end()));// 输出所有的排列,拼接成一个字符串输出for (const auto& s : result) {cout << s<<"\n";}
}

http://www.ppmy.cn/server/164117.html

相关文章

idea对jar包内容进行反编译

1.先安装一下这个插件java Bytecode Decompiler 2.找到这个插件的路径&#xff0c;在idea的plugins下面的lib文件夹内&#xff1a;java-decompiler.jar。下面是我自己本地的插件路径&#xff0c;以作参考&#xff1a; D:\dev\utils\idea\IntelliJ IDEA 2020.1.3\plugins\java-d…

设计模式-建造者模式、原型模式

目录 建造者模式 定义 类图 优缺点 角色 建造者模式和工厂模式比较 使用案例 原型模式 定义 类图 优缺点 应用场景 应用类型 浅克隆 深克隆 建造者模式 定义 将一个复杂的对象的构造与它的表示分离&#xff0c;使同样的构建过程可以创建不同的表示&#xff0c;…

Python从0到100(八十六):神经网络-ShuffleNet通道混合轻量级网络的深入介绍

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

项目集成GateWay

文章目录 1.环境搭建1.创建sunrays-common-cloud-gateway-starter模块2.目录结构3.自动配置1.GateWayAutoConfiguration.java2.spring.factories 3.pom.xml4.注意&#xff1a;GateWay不能跟Web一起引入&#xff01; 1.环境搭建 1.创建sunrays-common-cloud-gateway-starter模块…

Three.js实战项目02:vue3+three.js实现汽车展厅项目

文章目录 实战项目02项目预览项目创建初始化项目模型加载与展厅灯光加载汽车模型设置灯光材质设置完整项目下载实战项目02 项目预览 完整项目效果: 项目创建 创建项目: pnpm create vue安装包: pnpm add three@0.153.0 pnpm add gsap初始化项目 修改App.js代码&#x…

什么情况该换手机?先看后买不踩坑

现在的智能手机发展的非常快&#xff0c;很多刚出来的1000多元的手机性能已经可以流畅玩游戏、刷视频了&#xff0c;而且基本上也能使用3-5年的时。如果真要把手机用到实在不能用了&#xff0c;可能真的会影响生活体验&#xff0c;还有可能因为电池鼓包等问题发生危险&#xff…

Python学习之旅:进阶阶段(五)数据结构-双端队列(collections.deque)

在 Python 的进阶学习过程中,数据结构的掌握至关重要。今天要介绍的双端队列(deque,即 double-ended queue),是一种非常实用的数据结构,Python 的collections模块中的deque类为我们提供了强大的双端队列操作功能。接下来,就一起深入了解双端队列吧。 一、什么是双端队列…

React第二十八章(css modules)

css modules 什么是 css modules 因为 React 没有Vue的Scoped&#xff0c;但是React又是SPA(单页面应用)&#xff0c;所以需要一种方式来解决css的样式冲突问题&#xff0c;也就是把每个组件的样式做成单独的作用域&#xff0c;实现样式隔离&#xff0c;而css modules就是一种…