Codeforces Round #726 (Div. 2) E2. Erase and Extend (Hard Version) 贪心
传送门
文章目录
- 题意:
- 思路:
题意:
给你一个长度为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) 贪心相关推荐
- 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],他们总共花费 ...
- Codeforces Round #726 (Div. 2) F. Figure Fixing 二分图 + 思维
传送门 文章目录 题意: 思路 题意: 给你一张nnn个点mmm条边的图,每个点都有一个当前值aia_iai,目标值bib_ibi,每次可以选择一条边(i,j)(i,j)(i,j),将ai,aja ...
- Codeforces Round #726 (Div. 2) D. Deleting Divisors 博弈
传送门 文章目录 题意: 思路: 题意: 给你一个数nnn,有两个人博弈,每次可以将nnn减去一个nnn的因子,这个因子不能为111或nnn.当不能操作的人输掉游戏.问你先手赢还是后手赢. 思路: 这 ...
- Codeforces Round #617 (Div. 3) E2. String Coloring (hard version) 思维 + dp + Dilworth定理
传送门 文章目录 题意: 思路: 题意: 让你给一个串染色,不同颜色且相邻的一对字符可以互换位置,用最少的颜色,使交换后这个字符串字典序最小. 思路: 考虑将字符串分成若干个非递减的子序列,由于其非递 ...
- Codeforces Round #601 (Div. 2) E2. Send Boxes to Alice (Hard Version) 思维 + 质因子
传送门 文章目录 题意: 思路: 题意: 大体题意跟easyeasyeasy版本差不多,就是hardhardhard版本的aaa范围更大.见这里Codeforces Round #601 (Div. ...
- Codeforces Round #167 (Div. 1) C. Dima and Horses(BFS+贪心)
题目大意 有 n(1≤n≤3*105) 匹马,每条马都有几个敌人(不超过 3 个),现在要求把这些马分成两部分(允许一部分中没有一条马),使得对于每条马,和它在同一部分中的敌人的数量不超过1个 给出了 ...
- Codeforces Round #579 (Div. 3) F2. Complete the Projects (hard version) dp + 贪心
传送门 文章目录 题意: 思路: 题意: 思路: 排序方式跟easyeasyeasy版本的一样,但是hardhardhard版本是输出最多能选多少,所以我们对b<0b<0b<0的情况 ...
- Codeforces Round #579 (Div. 3) F1. Complete the Projects (easy version) 排序 + 贪心
传送门 文章目录 题意: 思路: 题意: 思路: 比较直观的想法就是对于bi≥0b_i\ge0bi≥0的项目,我们将aia_iai从小到大排序,让后依次加bib_ibi,如果有取不到的,显然就无 ...
- 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 ...
最新文章
- Ubuntu系统添加root用户
- 13.挂载点、文件系统、磁盘的命名、分区的命名
- 轻松看懂java设计模式简单工厂模式
- python闭环最短路径_最短路径算法的实现(dijskstra):Python
- 计算机组成原理电子时钟设计与实现,《计算机组成原理》课程设计报告-基于VHDL数字电子钟设计与实现.doc...
- Jenkins学习总结(1)——Jenkins详细安装与构建部署使用教程
- 一步一步写算法(之合并排序)
- 工作中使用BBM:消费者的“闺蜜”级顾问 凯特周智囊团
- 概念数据模型(E-R模型)
- coolie —— 前端开发构建工具。
- windows中家庭网络、工作网络、公用网络的作用及区别
- 强网杯2021——wp
- 排球比赛计分程序功能说明书
- element tree不刷新视图_00后都开始找工作了,这些都不懂还聊个啥?
- BeautifulSoup基础学习笔记
- 华为Cloud Native Lives课程第一课-云原生技术的前世今生
- c语言模拟计算机程序阶乘,C语言程序设计——快速入门与提高CAP-中国大学mooc-题库零氪...
- webSocket 实现消息推送、心跳、已读消息、加载更多等功能
- msn 81000306 无法登录
- 15款免费艺术院校学生求职简历word模板,四页求职简历模板,含自荐信
热门文章
- 女孩子狠起来可以多可怕?
- 哈哈哈,弟弟被卡桶里了......
- 女生会 P 的可不仅仅是丰胸和瘦腿......
- 大数据分析苏轼,你没看错,这些都是小学生完成的
- mysql去掉两个最高分_数据分析系列 16/32 | MySQL中子查询与联合查询
- java sql objects_Java SQL注入学习笔记
- linux脚本开机挂载,案例七:shell实现开机自动挂载本地YUM仓库程序
- ios中amplify配置configure_Nginx源码编译安装及配置文件初步学习
- mindray心电监护仪使用说明_怎么看监护仪上的参数
- oracle clob 查询换行,sqoop clob从Oracle导入到hive 回车换行导致记录增多