题目链接:https://codeforces.com/contest/1368/problem/B

题意

构造最短的至少含有 $k$ 个 $codeforces$ 子序列的字符串。

题解

如下表:

  c o d e f o r c e s 子序列个数
个数 1 1 1 1 1 1 1 1 1 1 $1^{10}$
  2 2 2 2 2 2 2 2 2 2 $2^{10}$
  3 3 3 3 3 3 3 3 3 3 $3^{10}$

依次构造每个字符的个数即可。

证明

  c o d e f o r c e s 子序列个数
个数 2 2 1 1 1 1 1 1 1 1 $4$
  2 3 1 1 1 1 1 1 1 1 $6$
  2 2 2 1 1 1 1 1 1 1 $8$

向第一行的构造方案中再添加一个字符有第二、三行两种方式,显然第三行的方式子序列更多。

因为第二行增加的是 $2 \times 1^8$,第三行增加的是 $2^2 \times 1^7$,即每增加一个字符增加子序列个数的为其他字符个数的乘积,所以每个字符的个数一定会如上表依次增大。

代码

C++

#include <bits/stdc++.h>
using ll = long long;
using namespace std;
string s = "codeforces";
int main() {
ll k; cin >> k;
vector<int> cnt(10, 1);
ll tot = 1;
for (int loop = 2; tot < k; loop++) {
for (int j = 0; j < 10; j++) {
if (tot < k) {
tot = tot / cnt[j] * loop;
cnt[j] = loop; //同cnt[j]++
}
}
}
for (int i = 0; i < 10; i++)
cout << string(cnt[i], s[i]);
}

Python3

from functools import reduce

s = "codeforces"
a = [0] * 10
k = int(input())
p = 0 while reduce(lambda x, y : x * y, a) < k:
a[p % 10] += 1;
p += 1 for i in range(10):
print(s[i] * a[i], end = "")

最新文章

  1. javascript 获取滚动条高度+常用js页面宽度与高度
  2. hash-3.hashCode
  3. 李洪强iOS经典面试题137-内存管理
  4. sysctl kernel parameter Optimization note
  5. 构造函数和:this()的应用
  6. canvas背景透明
  7. AFNETWORKING tabelView没有reloadData,报错unsupported URL
  8. C# 给自己的代码 添加上 自己的版权信息
  9. Servlet的请求HttpServletRequest
  10. EL表达式得不到后台传过来的值
  11. 设计模式之观察者(OBSERVER)模式
  12. 一、docker的原理
  13. WithOne 实体关系引起 EF Core 自动删除数据
  14. Sharepoint 2016 配置FBA(二) 编辑Web,config文件
  15. springboot源码解读01
  16. ArcEngine不同种类的工作空间建立查询ICursor时“超出系统资源”
  17. 洛谷 P4174 [NOI2006]最大获利 解题报告
  18. Button去除边框方法
  19. 用Thread类创建线程
  20. Android 监听屏幕唤醒和关闭的广播

热门文章

  1. centos7 在虚拟机中装好后的网络连接问题
  2. 一网打尽,一文讲通虚拟机VirtualBox及Linux使用
  3. MySQL45讲笔记-事务隔离级别,为什么你改了数据我看不见
  4. Ossec 安装并配置邮件通知
  5. 安装Tomcat 9
  6. leetcode 886. 可能的二分法(DFS,染色,种类并查集)
  7. egret 解决游戏loading前的黑屏
  8. 【转】自定义ALV控件的工具条按钮
  9. 06--Docker自定义镜像Tomcat9
  10. Entity与Entity之间的相互转化