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

AtCoder Beginner Contest 416 C 题

题目连接

题意: 给定 NNN 个字符串, 存在 NKN^KNK 个整数序列. 按照所有的整数序列将字符串拼接, 然后按照字典序升序排列, 求第 XXX 个字符串.
数据范围: 1≤N≤10;1≤K≤5;1≤X≤NK1 \leq N \leq 10; 1 \leq K \leq 5; 1\leq X \leq N^K1N10;1K5;1XNK

题解: 全排列的时间复杂度为 O(NK)O(N^K)O(NK) , 排序的时间复杂度为 O(NK∗logNk)O(N^K * log{N^k})O(NKlogNk). 直接暴力.

const int N = 1e5 + 5;
vector<int> path;  // 记录排列
int n, k, x;
vector<vector<int>> res(N);  // 存储所有的排列
int cnt;// 对于 [1, n] 之间的所有数, 所有的整数序列
// 形参 d 表示, 当前递归到哪一位上.
void dfs(int d) {if (d == k) {  // 如果已经递归到第 k 位上, 表示当前的排列长度为 k. 跳出递归.for (int e : path) {  // 记录排列res[cnt].emplace_back(e);}cnt++;return;}for (int i = 1; i <= n; ++i) {  // 遍历所有整数path.push_back(i);dfs(d + 1);path.pop_back(); // 上一层递归结束之后, 恢复现场, 删除上一层添加的元素}
}void slove()
{cin >> n >> k >> x;vector<string> a(n + 5);for (int i = 0; i < n; i++) cin >> a[i];int len = pow(n, k);vector<string> b(len);int sz = 0;dfs(0);// 将所有的整数序列所代表的字符串拼接for (int i = 0; i < cnt; i++) {string s;for (auto e : res[i]) {s += a[e - 1];}b[sz++] = s;}// 排序即可得到字典序升序sort(b.begin(), b.begin() + sz);cout << b[x - 1] << endl;
}
http://www.dtcms.com/a/315166.html

相关文章:

  • 【软件与环境】--腾讯云服务器的使用和部署
  • 【软件与环境:虚拟机】--VMware Workstation 16 pro安装+Cenos7
  • 8位以及32位的MCU如何进行选择?
  • 机器学习实战:逻辑回归深度解析与欺诈检测评估指标详解(二)
  • JVM相关知识
  • Servlet 相关笔记整理
  • shell脚本tcpdump抓取数据解析执行关机指令
  • Javascript面试题及详细答案150道之(031-045)
  • ES集群调优策略
  • NetBSD notes[1]
  • Redis 常用数据结构以及单线程模型
  • 力扣热题100------21.合并两个有序链表
  • Redis分布式锁简单实现
  • 安卓的NDK、ABI、JNI到底是指啥?区别与联系是?
  • Prometheus-3--Prometheus是怎么抓取Java应用,Redis中间件,服务器环境的指标的?
  • Ollama入门实战
  • ES集群规划与调优
  • Matlab(1)
  • 蓝桥杯----AT24C02
  • 【Git】怎么将https://coding.net的仓库迁移至https://cnb.cool/
  • 拉格朗日松弛算法求解VRP(Vehicle Routing Problem)车辆路径问题和简单示例
  • Linux的进程管理与监控和任务工具crontab的使用
  • 臭氧、颗粒物和雾霾天气过程的大气污染物计算 CAMx模型
  • 用思维框架拆解知识,开启高效学习之旅
  • 【基础完全搜索】USACO Bronze 2019 January - 猜动物Guess the Animal
  • RabbitMQ--介绍
  • 498. 对角线遍历
  • JUCE VST AI 开源
  • 2025最好的Dify入门到精通教程(上)
  • 微服务的编程测评系统10-竞赛删除发布-用户管理-登录注册