传送门

文章目录

  • 题意:
  • 思路:

题意:

给你一个长度为nnn的串sss,你有两个操作可以使用:
(1)(1)(1)从sss的结尾删除一个字母。
(2)s=s+s(2)s=s+s(2)s=s+s。
让你通过若干次操作使其变成一个长度为kkk的串,且其字典序最小。
n,k≤5e5n,k\le5e5n,k≤5e5

思路:

首先通过E1E1E1我们暴力前缀可知答案一定是一个前缀不断重复多次得到的答案,这个也比较好理解,不多加赘述。
设当前最优解的前缀长度为lenlenlen,当前遍历第iii个的时候,与将最优前缀重复若干次后该位置比较,也就是将imodleni\bmod lenimodlen的位置,有三种情况:
(1)a[i]>a[imodlen](1)a[i]>a[i\bmod len](1)a[i]>a[imodlen],这个时候直接退出就好了,因为最优串字典序一定更小。
(2)a[i]=a[imodlen](2)a[i]=a[i\bmod len](2)a[i]=a[imodlen],这个时候继续往下比即可。
(3)a[i]<a[imodlen](3)a[i]<a[i\bmod len](3)a[i]<a[imodlen],这个时候显然更新成长度为iii的时候更优,所以len=i+1len=i+1len=i+1。
这个贪心直觉上是正确的,正确性也有人证过,我这个小菜鸡就不多说了。

// Problem: E2. Erase and Extend (Hard Version)
// Contest: Codeforces - Codeforces Round #726 (Div. 2)
// URL: https://codeforces.com/contest/1537/problem/E2
// Memory Limit: 256 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#include<random>
#include<cassert>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid ((tr[u].l+tr[u].r)>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n,k;
char s[N];int main()
{//  ios::sync_with_stdio(false);
//  cin.tie(0);cin>>n>>k>>(s);int ans=1;for(int i=0;i<n;i++) {if(s[i]>s[i%ans]) break;else if(s[i]<s[i%ans]) ans=i+1;}for(int i=0;i<k;i++) printf("%c",s[i%ans]); puts("");return 0;
}
/**/

Codeforces Round #726 (Div. 2) E2. Erase and Extend (Hard Version) 贪心相关推荐

  1. Codeforces Round #568 (Div. 2)C2. Exam in BerSU (hard version)

    Codeforces Round #568 (Div. 2)C2. Exam in BerSU (hard version) 贪心+暴力 大致题意:N个人考试,每个人花费的时间是a[i],他们总共花费 ...

  2. Codeforces Round #726 (Div. 2) F. Figure Fixing 二分图 + 思维

    传送门 文章目录 题意: 思路 题意: 给你一张nnn个点mmm条边的图,每个点都有一个当前值aia_iai​,目标值bib_ibi​,每次可以选择一条边(i,j)(i,j)(i,j),将ai,aja ...

  3. Codeforces Round #726 (Div. 2) D. Deleting Divisors 博弈

    传送门 文章目录 题意: 思路: 题意: 给你一个数nnn,有两个人博弈,每次可以将nnn减去一个nnn的因子,这个因子不能为111或nnn.当不能操作的人输掉游戏.问你先手赢还是后手赢. 思路: 这 ...

  4. Codeforces Round #617 (Div. 3) E2. String Coloring (hard version) 思维 + dp + Dilworth定理

    传送门 文章目录 题意: 思路: 题意: 让你给一个串染色,不同颜色且相邻的一对字符可以互换位置,用最少的颜色,使交换后这个字符串字典序最小. 思路: 考虑将字符串分成若干个非递减的子序列,由于其非递 ...

  5. Codeforces Round #601 (Div. 2) E2. Send Boxes to Alice (Hard Version) 思维 + 质因子

    传送门 文章目录 题意: 思路: 题意: 大体题意跟easyeasyeasy版本差不多,就是hardhardhard版本的aaa范围更大.见这里Codeforces Round #601 (Div. ...

  6. Codeforces Round #167 (Div. 1) C. Dima and Horses(BFS+贪心)

    题目大意 有 n(1≤n≤3*105) 匹马,每条马都有几个敌人(不超过 3 个),现在要求把这些马分成两部分(允许一部分中没有一条马),使得对于每条马,和它在同一部分中的敌人的数量不超过1个 给出了 ...

  7. Codeforces Round #579 (Div. 3) F2. Complete the Projects (hard version) dp + 贪心

    传送门 文章目录 题意: 思路: 题意: 思路: 排序方式跟easyeasyeasy版本的一样,但是hardhardhard版本是输出最多能选多少,所以我们对b<0b<0b<0的情况 ...

  8. Codeforces Round #579 (Div. 3) F1. Complete the Projects (easy version) 排序 + 贪心

    传送门 文章目录 题意: 思路: 题意: 思路: 比较直观的想法就是对于bi≥0b_i\ge0bi​≥0的项目,我们将aia_iai​从小到大排序,让后依次加bib_ibi​,如果有取不到的,显然就无 ...

  9. A. Arithmetic Array Codeforces Round #726 (Div. 2)

    A. Arithmetic Array An array b of length k is called good if its arithmetic mean is equal to 1. More ...

最新文章

  1. Ubuntu系统添加root用户
  2. 13.挂载点、文件系统、磁盘的命名、分区的命名
  3. 轻松看懂java设计模式简单工厂模式
  4. python闭环最短路径_最短路径算法的实现(dijskstra):Python
  5. 计算机组成原理电子时钟设计与实现,《计算机组成原理》课程设计报告-基于VHDL数字电子钟设计与实现.doc...
  6. Jenkins学习总结(1)——Jenkins详细安装与构建部署使用教程
  7. 一步一步写算法(之合并排序)
  8. 工作中使用BBM:消费者的“闺蜜”级顾问 凯特周智囊团
  9. 概念数据模型(E-R模型)
  10. coolie —— 前端开发构建工具。
  11. windows中家庭网络、工作网络、公用网络的作用及区别
  12. 强网杯2021——wp
  13. 排球比赛计分程序功能说明书
  14. element tree不刷新视图_00后都开始找工作了,这些都不懂还聊个啥?
  15. BeautifulSoup基础学习笔记
  16. 华为Cloud Native Lives课程第一课-云原生技术的前世今生
  17. c语言模拟计算机程序阶乘,C语言程序设计——快速入门与提高CAP-中国大学mooc-题库零氪...
  18. webSocket 实现消息推送、心跳、已读消息、加载更多等功能
  19. msn 81000306 无法登录
  20. 15款免费艺术院校学生求职简历word模板,四页求职简历模板,含自荐信

热门文章

  1. 女孩子狠起来可以多可怕?
  2. 哈哈哈,弟弟被卡桶里了......
  3. 女生会 P 的可不仅仅是丰胸和瘦腿......
  4. 大数据分析苏轼,你没看错,这些都是小学生完成的
  5. mysql去掉两个最高分_数据分析系列 16/32 | MySQL中子查询与联合查询
  6. java sql objects_Java SQL注入学习笔记
  7. linux脚本开机挂载,案例七:shell实现开机自动挂载本地YUM仓库程序
  8. ios中amplify配置configure_Nginx源码编译安装及配置文件初步学习
  9. mindray心电监护仪使用说明_怎么看监护仪上的参数
  10. oracle clob 查询换行,sqoop clob从Oracle导入到hive   回车换行导致记录增多