【2024最新华为OD-C/D卷试题汇总】[支持在线评测] LYA的字符串拼接游戏(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

📎在线评测链接

https://app5938.acapp.acwing.com.cn/contest/2/problem/OD1088

🌍 评测功能需要 ⇒ 订阅专栏 ⇐ 后私信联系清隆解锁~

🍓OJ题目截图

在这里插入图片描述

文章目录

    • 📎在线评测链接
    • 🍓OJ题目截图
    • 🌲 LYA的字符串拼接游戏
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 样例解释
      • 样例输入
      • 样例输出
      • 样例解释
      • 数据范围
      • 题解
      • 参考代码

🌲 LYA的字符串拼接游戏

问题描述

LYA最近迷上了一款字符串拼接游戏。游戏规则如下:

给定一个由小写字母组成的字符集合,以及一个正整数 N N N。从字符集合中任意取出字符(每个字符只能用一次),拼接成一个长度为 N N N 的字符串,要求相邻的字符不能相同。

请帮助LYA计算出,给定的字符集合能拼接出多少种满足条件的字符串。如果输入非法或无法拼接出满足条件的字符串,则输出 0 0 0

输入格式

输入为一行,包含一个由小写字母组成的字符串和一个正整数 N N N,两者之间用一个空格分隔。

  • $1 \le $ 字符串长度 ≤ 29 \le 29 29
  • 1 ≤ N ≤ 5 1 \le N \le 5 1N5

输出格式

输出一个整数,表示能拼接出的满足条件的字符串个数。

样例输入

abc 1

样例输出

3

样例解释

给定的字符集合为 abc,结果字符串长度为 1 1 1,可以拼接出 abc 三种字符串,因此输出 3 3 3

样例输入

dde 2

样例输出

2

样例解释

给定的字符集合为 dde,结果字符串长度为 2 2 2,可以拼接出 deed 两种字符串,因此输出 2 2 2

数据范围

  • $1 \le $ 字符串长度 ≤ 29 \le 29 29
  • 1 ≤ N ≤ 5 1 \le N \le 5 1N5

题解

本题可以用回溯法(DFS)来解决。

我们定义一个布尔数组 vis 来记录每个字符是否被使用过。然后从字符集合的第一个字符开始,尝试将它加入结果字符串。如果当前字符没有被使用过,且与结果字符串的最后一个字符不同,就将它加入结果字符串,并标记为已使用。

接下来,我们继续尝试从剩余的未使用字符中选择下一个字符,直到结果字符串的长度达到 N N N。如果能够成功构造出一个满足条件的字符串,就将答案加一。

在尝试每一步时,我们都需要跳过重复的字符,以避免重复计算。这可以通过对字符集合进行排序,然后在遍历时跳过连续相同的字符来实现。

时间复杂度为 O ( N ! × M ) O(N! \times M) O(N!×M),其中 N N N 为结果字符串的长度, M M M 为字符集合的长度。空间复杂度为 O ( M ) O(M) O(M),用于存储字符集合和访问数组。

参考代码

  • Python
from itertools import permutationsdef count_strings(chars, n):res = 0for perm in permutations(chars, n):if all(perm[i] != perm[i+1] for i in range(n-1)):res += 1return reschars, n = input().split()
n = int(n)
print(count_strings(chars, n))
  • Java
import java.util.*;public class Main {static int k;static char[] cs;static int res;static boolean[] vis;static StringBuilder sb = new StringBuilder();static int n;public static void main(String[] args) {Scanner sc = new Scanner(System.in);String s = sc.next();n = s.length();k = sc.nextInt();cs = s.toCharArray();vis = new boolean[n];Arrays.sort(cs);dfs(0);System.out.println(res);}static void dfs(int u) {if (u == k) {res++;return;}for (int i = 0; i < n; i++) {if (vis[i]) {continue;}if (i > 0 && cs[i] == cs[i - 1] && !vis[i - 1]) {continue;}if (sb.length() > 0 && sb.charAt(sb.length() - 1) == cs[i]) {continue;}vis[i] = true;sb.append(cs[i]);dfs(u + 1);sb.deleteCharAt(sb.length() - 1);vis[i] = false;}}
}
  • Cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int n, k;
string cs;
int res = 0;
vector<bool> vis;
string sb;void dfs(int u) {if (u == k) {res++;return;}for (int i = 0; i < n; i++) {if (vis[i]) {continue;}if (i > 0 && cs[i] == cs[i - 1] && !vis[i - 1]) {continue;}if (!sb.empty() && sb.back() == cs[i]) {continue;}vis[i] = true;sb.push_back(cs[i]);dfs(u + 1);sb.pop_back();vis[i] = false;}
}int main() {cin >> cs >> k;n = cs.length();vis.resize(n, false);sort(cs.begin(), cs.end());dfs(0);cout << res << endl;return 0;
}

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

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

相关文章

GO sync包——读写锁

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

多表查询实训

前提 本篇博客&#xff0c;我将通过讲解例题的方式&#xff0c;带大家进一步掌握多表查询的使用规则和使用技巧 正文 前提 先建好表 表1 salgrade (薪资等级表&#xff09; 表2 emp(员工信息表&#xff09; 表3 dept&#xff08;部门信息表&#xff09;&#xff0c;插入相…

docker-mysql主从复制

MySQL主从复制 安装docker和拉取镜像不再赘述 一.主服务器 1.新建主服务器容器-3307 &#xff08;这里设置的密码可能不生效&#xff0c;若未生效请看问题中的2&#xff09; docker run -p 3307:3306 --name mysql-master \ -v /mydata/mysql-master/log:/var/log/mysql \…

第三十七篇——麦克斯韦的妖:为什么要保持系统的开放性?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 如果没有详细的学习这篇文章&#xff0c;我觉得我就是被麦克斯韦妖摆弄的…

[机缘参悟-200] - 对自然、人性、人生、人心、人际、企业、社会、宇宙全面系统的感悟 - 全图解

对自然、人性、人生、人心、人际、企业、社会、宇宙进行全面系统的感悟&#xff0c;是一个极其深邃且复杂的主题。以下是对这些领域的简要感悟&#xff1a; 自然&#xff1a; 自然是人类生存的根基&#xff0c;它充满了无尽的奥秘和美丽。自然界的平衡和循环规律&#xff0c;教…

算法设计与分析--近似算法内容整理

文章目录 P、NP、NP-hard 和 NPC多项式时间概念区分NP-hard 的证明例题 1 证明 T S P TSP TSP 问题是 N P − h a r d NP-hard NP−hard 问题 。例题 2 证明最大加权独立集问题是 N P − h a r d NP-hard NP−hard 问题。 扩展 NP-hard 问题3-SAT 问题TSP 旅行商问题 Load B…

AI大模型的制造业场景,一文读懂

导读 如何认识这一轮AI技术发展影响的深度和广度&#xff1f;如何判断这一轮AI技术变革的性质&#xff1f; AI大模型是通用人工智能发展的重要里程碑。中央会议关于人工智能发展提出三个第一次&#xff1a;第一次提出“通用人工智能”&#xff0c;第一次提出“产业智能化”&a…

武汉星起航:激发中国卖家潜力,亚马逊减免政策共筑电商辉煌

在全球化电子商务的浪潮中&#xff0c;亚马逊作为全球领先的电商平台&#xff0c;一直致力于为卖家提供卓越的服务和支持。特别是对于中国卖家而言&#xff0c;亚马逊的减免优惠政策无疑是一股强大的助力&#xff0c;帮助他们在不断发展的市场中脱颖而出&#xff0c;实现业务的…

设计模式 - Observer Pattern 观察者模式

文章目录 定义观察者模式的实现构成构成UML图 观察者模式的代码实现场景代码实现 总结优点缺点应用场景 其他设计模式文章&#xff1a; 定义 观察者模式是行为型模式的一种&#xff0c;它定义对象间的一种一对多的依赖关系&#xff0c;使得每当一个对象改变状态&#xff0c;它…

MathType7.6专业数学公式编辑器!与Word、PPT等常用软件无缝对接。

MathType&#xff0c;一款专业的数学公式编辑器&#xff0c;以其强大的功能和友好的用户界面&#xff0c;在科研、教学等领域广受欢迎。它支持丰富的数学符号和公式模板&#xff0c;满足不同用户的需求。同时&#xff0c;MathType还提供了多种输出格式&#xff0c;方便与其他文…

基于YOLOv9+pyside的安检仪x光危险物物品检测(有ui)

安全检查在公共场所确保人身安全的关键环节&#xff0c;不可或缺。X光安检机作为必要工具&#xff0c;在此过程中发挥着重要作用。然而&#xff0c;其依赖人工监控和判断成像的特性限制了其应用效能。本文以此为出发点&#xff0c;探索了基于Torch框架的YOLO算法在安检X光图像中…

《数据结构与算法基础 by王卓老师》学习笔记——类C语言有关操作补充

1.元素类型说明 2.数组定义 3.C语言的内存动态分配 4..C中的参数传递 5.传值方式 6.传地址方式 例子

【计算机网络】期末复习(2)

目录 第一章&#xff1a;概述 第二章&#xff1a;物理层 第三章&#xff1a;数据链路层 第四章&#xff1a;网络层 第五章&#xff1a;传输层 第一章&#xff1a;概述 三大类网络 &#xff08;1&#xff09;电信网络 &#xff08;2&#xff09;有线电视网络 &#xff0…

快速了解GPT-4o和GPT-4区别

GPT-4o简介 在5月14日的OpenAI举行春季发布会上&#xff0c;OpenAI在活动中发布了新旗舰模型“GPT-4o”&#xff01;据OpenAI首席技术官穆里穆拉蒂&#xff08;Muri Murati&#xff09;介绍&#xff0c;GPT-4o在继承GPT-4强大智能的同时&#xff0c;进一步提升了文本、图像及语…

JVM原理(四):JVM垃圾收集算法与分代收集理论

从如何判定消亡的角度出发&#xff0c;垃圾收集算法可以划分为“引用计数式垃圾收集”和“追踪式垃圾收集”两大类。 本文主要介绍的是追踪式垃圾收集。 1. 分代收集理论 当代垃圾收集器大多遵循“分代收集”的理论进行设计&#xff0c;它建立在两个假说之上&#xff1a; 弱分…

vue插槽的简单使用

默认插槽 1.在Category中创建插槽 <slot>默认值<slot/> 2.在App中使用 <Category tittle"美食"> <ul ><li v-for"(l,index) in foods" :key"index">{{l}}</li></ul> </Category> 3.运行后的…

【教学类65-04】20240625秘密花园涂色书04(通义万相)(图纸16:9,A4横板1张,一大168张纸168份)

背景需求 【教学类65-01】20240622秘密花园涂色书01&#xff08;通义万相&#xff09;&#xff08;A4横版2张&#xff0c;一大3小 38张纸76份&#xff09;-CSDN博客文章浏览阅读118次。【教学类65-01】20240622秘密花园涂色书01&#xff08;通义万相&#xff09;&#xff08;A…

操作系统-文件的物理结构(文件分配方式)

文章目录 总览文件块和磁盘块连续分配顺序访问直接访问&#xff08;随机访问&#xff09;为什么连续分配同时支持这两种访问模式&#xff1f; 链接分配隐式链接显示链接小结索引分配链接方案多层索引混合索引小结 总结 总览 文件数据存放在外存中 文件块和磁盘块 文件内通过逻…

万字长文详解数据结构:树 | 第6章 | Java版大话数据结构 | 二叉树 | 哈夫曼树 | 二叉树遍历 | 构造二叉树 | LeetCode练习

&#x1f4cc;本篇分享的大话数据结构中&#x1f384;树&#x1f384;这一章的知识点&#xff0c;在此基础上&#xff0c;增加了练习题帮助大家理解一些重要的概念✅&#xff1b;同时&#xff0c;由于原文使用的C语言代码&#xff0c;不利于学习Java语言的同学实践&#xff0c;…

Linux中使用网络文件系统NFS挂载远程目录,对远程文件的本地化操作

目录 一、NFS及其在linux系统中的挂载 1、NFS概述 2、NFS挂载及其作用 &#xff08;1&#xff09;资源共享 &#xff08;2&#xff09;简化数据管理 &#xff08;3&#xff09;提高数据可用性 &#xff08;4&#xff09;灵活性 &#xff08;5&#xff09;访问控制 &am…