题目 Codeforces Subsequences

题目链接 :Codeforces Subsequences

题目大意:

构造一个字符串,至少包含k个codeforces子序列,并且字符串最短。

思路:构造

假设我们要找的不是codeforces的子序列,而是abcde。如果一个字符串中a字母不在最前面,那么把它移到最前面其他不变的话,就多了一个abcde序列。所以为了让序列更多,那么只需要将所有的a都移动到最前面即可。b跟着a的后面,c跟着b的后面,其他也如此。

每个字母的排序问题已经解决了,那么现在就是每个字母有多少个的问题了。答案是我们应该让每个字母的数量尽可能接近。

证明:子序列的数量就等于 SumA * SumB * SumC * SumD * SumESumA表示a的数量,如果 SumA - SumB > 1的话,那么(SumA - 1) * (SumB + 1) > SumA * SumB ,所以为了让字符串更短,所以让每个字母的数量尽可能接近。

现在我们就可以通过循环增加每个字符的数量,一旦乘积至少为k,那么就退出循环,最后打印每个字母的数量即可。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 10, inf = 0x3f3f3f3f, mod = 998244353;
int n, k;
ll a[N], c[N];
signed main()
{#ifdef Xinfreopen("in.in", "r", stdin);freopen("out.out", "w", stdout);
#endifll k;cin >> k;string s = "codeforces";int n = s.size();vector<int> a(n, 1);ll sum = 1;for (int i = 0; sum < k; i = (i + 1) % n){sum = sum / a[i] * (a[i] + 1);a[i]++;}for (int i = 0; i < n; i++){for (int j = 0; j < a[i]; j++)cout << s[i];}return 0;
}

小红的构造题

题目链接 :小红的构造题

题目大意:

构造一个字符串,至少包含k个red子序列,并且字符串长度不超过200000

思路:构造

这道题就不能用上道题的方法了,为什么?

假设k == 1e14,那么为了让字符串最短,那么每个字目的长度为1e5,那么三个字母的长度就为3e5超过范围。为什么上道题可以那样写,因为codeforces有10个字母,每个字母长度假设有100,那么最多只需要1000个字符就能解决问题。

那这道题这么解决:

我们可以先构造这样一个字符串rererererere....,在第一个re后面加x个d,那序列个数就加了x个,如果在第二个re后面加了x个d,那么就增加了3*x子序列,依次类推,在第k个re后面加x个d,那就增加k*(k+1)*x/2个子序列。

所以为了让字符串长度越小,所以需要从后往前枚举,每次填入x个字符串即可。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 10, inf = 0x3f3f3f3f, mod = 998244353;
ll k;
ll a[N], c[N];
signed main()
{#ifdef Xinfreopen("in.in", "r", stdin);freopen("out.out", "w", stdout);
#endifcin >> k;if (k == 0){cout << "a";return 0;}int M = 80000;for (int i = 1; i <= M; i++){a[i] = (ll)i * (i + 1) / 2;}int id = 0;for (int i = M; i >= 1; i--){if (k >= a[i]){c[i] = k / a[i];k %= a[i];}}for (int i = 1; i <= M; i++){cout << "re";while (c[i]--)cout << 'd';}return 0;
}

【构造】构造一个字符串满足k个子序列问题总结相关推荐

  1. linux shell 字符串替换字符,关于bash:在shell脚本中替换另一个字符串的一个子字符串...

    我有"我爱苏西并结婚",我想把"苏西"改成"萨拉". #!/bin/bash firstString="I love Suzi a ...

  2. 【LeetCode】1400. 构造 K 个回文字符串 Construct K Palindrome Strings

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 统计奇数字符出现次数 日期 题目地址:https:// ...

  3. 每天一道LeetCode-----计算字符串s中有多少个子序列和字符串t相等

    Distinct Subsequences 原题链接Distinct Subsequences 判断字符串s中有多少个子序列和t相等,一个字符串的子序列是将字符串中若干字符删除后形成的字符串 因为子序 ...

  4. Python 轻松解决从 K 个字符串数组中任意取一个字符串,按顺序拼接,列出所有可能的字符串组合。(对比用库和不用库的方法)

    文章目录 一.问题说明 二.解决方法 一.问题说明 问题来源:粉丝的提问 从 K 个字符串数组中任意取一个字符串,按顺序拼接,列出所有可能的字符串组合(对比用库和不用库的方法) 二.解决方法 iter ...

  5. 给定一个字符串,输出第一次出现k次的字母java,c++实现

    题目: 给定一个字符串,输出第一次出现k次的字母. 示例:    输入:abbcdaabgb               3    输出:a 输入:aaabbb               3     ...

  6. 找出一个字符串中出现次数最多的字_海量数据中找出前k大数(topk问题)

    在海量数据中找出出现频率最好的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为top K问题. 针对top K类问题,通常比较好的方案是分治+Trie树/hash+小顶堆(就是上面提到 ...

  7. 题目 给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and ']', 判定是否是有效的括号序列。 样例 括号必须依照 ()顺序表示, ()[]

    题目 给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and ']', 判定是否是有效的括号序列. 样例 括号必须依照 "()"顺序 ...

  8. 从K个数组中任取一个字符串进行按顺序拼接

    完整题目 给定K个字符串数组,从这K个数组中任取一个字符串,按顺序拼接,列出所有可能的字符串组合 样例: input:[['a','b','cd'],['de'],['e','f']] output: ...

  9. 以太坊区块链黑客松: 构造下一个数字世界

    今年,新冠状病毒突袭全球,似乎给全世界按下了"暂停"键,我们所依赖的生活网络以及习以为常的经验皆被中断或迟延.作为回应,这种突变敦促我们去重思当下诸多行业的社会经济构架,其中包括艺 ...

  10. 2020 中国开源年会暨阿帕奇中国路演-以太坊区块链黑客松:构造下一个数字世界...

    点击上方"开源社"关注我们 | 编辑:黄欣宜 | 设计:王福政 | 责编:王玥敏 9月11日 -10月 25日 // 线上黑客松  今年,新冠状病毒突袭全球,似乎给全世界按下了&q ...

最新文章

  1. 聊聊JvmGcMetrics的managementExtensionsPresent
  2. 「SLAM」三维空间刚体运动名词笔记
  3. socket异步处理问题
  4. 作者:熊贇(1980-),女,博士,复旦大学计算机科学技术学院教授。
  5. JavaScript中执行环境和栈
  6. python编程(数据库操作)
  7. android多击事件_Android中的多击事件
  8. 链表节点的删除(链表data升序有重复)
  9. SQL数据库的查询操作大全(select)
  10. JavaScript学习手册一:JS简介
  11. Android WebView加载webrtc视频通话
  12. 7-4 华氏度转摄氏度 (5分) java
  13. [转载]WiFi有死角? 巧用旧无线路由器扩展覆盖
  14. 【筹码分析】改版通达信PAVE筹码引力分析个股强势区和走势
  15. SPIR-V 研究:编译器基本原理(三) - Chomsky文法分类
  16. 【find128】项目
  17. 给excel设置格式
  18. 希尔排序选择排序时间复杂度分析
  19. 有没有人帮忙出一份答案,本人急用,python一级试卷。谢谢
  20. 天魔心法之——识人篇

热门文章

  1. Linux运维面试题
  2. PyQt5的笔记(中-1)
  3. MATLAB中使用IPOPT去解NLP问题的接口:AMPL 工具
  4. Python连连看小游戏源代码
  5. xencenter如何安装系统
  6. Java从入门到精通(一)
  7. VBA EXCEL 常用代码
  8. 计算机系统管理程序,计算机系统管理操作程序
  9. 软件测试文档测试用例,软件测试用例文档模板(带实例)
  10. 软件安装过程中,系统提示需要安装.Net Framework 3.5解决