题目大意:有一个长度为$n$的字符串$S$,有$k$次操作,每次操作为把$S$变为$SS^R$(即翻转后再接在一起),然后从中选取一段长度为$n$的字串。问$k$次操作后,字典序最小的一种是什么。$n\leqslant5000$,$k\leqslant10^9$

题解:最后一次肯定是在这其中选取字典序最小的一种,考虑前$k-1$次如何让$S_{k-1}S_{k-1}^R$的一个字串最小。发现一定让尽可能多的连续的最小的字母在开头。记最小字母为$a$,发现每次复制一次,都会让原串中最长的一串$a$的个数翻一倍。若$k$次后还没有覆盖满整个串,剩下的由$S^R$的前一部分填充。所以要在$a$的次数最多的前提下让$S^R$的字典序最小,而这个在第一次选的时候就确定了。所以第一次可以$O(n^2)$求出最小的字串(当然你要$O(n)$我也不拦你),然后就可以直接算出答案。

卡点:

C++ Code:

#include <cstdio>
#include <iostream>
#include <algorithm> int n, k, pos, len;
std::string s, t;
int main() {
std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);
std::cin >> n >> k >> s;
if (k > 16 || (1 << k - 1) >= n) {
std::cout << std::string(n, *std::min_element(s.begin(), s.end())) << '\n';
return 0;
}
t = s, s = s + std::string(s.rbegin(), s.rend());
for (int i = 0; i < n; ++i) t = std::min(t, s.substr(i, n));
for (; pos <= n && t[pos] == t[0]; ++pos) ;
len = std::min(n, pos << k - 1);
std::cout << std::string(len, t[0]) << t.substr(pos, n - len) << '\n';
return 0;
}

  

[Atcoder AGC037E]Reversing and Concatenating的更多相关文章

  1. @AGC037 - E@ Reversing and Concatenating

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个长度为 N 且只包含小写字母的字符串 S ,你可以执行 ...

  2. AtCoder Grand Contest 037

    Preface 这篇咕了可能快一个月了吧,正好今天晚上不想做题就来补博客 现在还不去复习初赛我感觉我还是挺刚的(微笑) A - Dividing a String 考虑最好情况把每个字符串当作一个来看 ...

  3. AtCoder Grand Contest 037 简要题解

    从这里开始 题目目录 Problem A Dividing a String 猜想每段长度不超过2.然后dp即可. 考虑最后一个长度大于等于3的一段,如果划成$1 + 2$会和后面相同,那么划成$2 ...

  4. AtCoder Beginner Contest 066 B - ss

    题目链接:http://abc066.contest.atcoder.jp/tasks/abc066_b Time limit : 2sec / Memory limit : 256MB Score ...

  5. AtCoder Grand Contest 021

    A - Digit Sum 2 Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement Find t ...

  6. AtCoder Grand Contest 021完整题解

    提示:如果公式挂了请多刷新几次,MathJex的公式渲染速度并不是那么理想. 总的来说,还是自己太弱了啊.只做了T1,还WA了两发.今天还有一场CodeForces,晚上0点qwq... 题解还是要好 ...

  7. Assembler : The Basics In Reversing

    Assembler : The Basics In Reversing Indeed: the basics!! This is all far from complete but covers ab ...

  8. AtCoder Regular Contest 061

    AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...

  9. 02-线性结构2 Reversing Linked List

    由于最近学的是线性结构,且因数组需开辟的空间太大.因此这里用的是纯链表实现的这个链表翻转. Given a constant K and a singly linked list L, you are ...

随机推荐

  1. Navicat配置跳板机连接数据库

    需求 在开发中,有时候我们会碰到这么一个情况.数据库的服务器在内网,如果想连接,必须得先ssh登陆到跳板机,然后在跳板机ssh到达数据库所在服务器,进而操作数据库.遗憾的是,如果跳板机和数据库所在服务 ...

  2. 【POJ3087】Shuffle'm Up

    本题传送门 本题知识点:宽度优先搜索 模拟 + map 本题题意有点懵.就是单纯的把S1像例子那样插到S2里,根本不是什么宽搜题,因为只是一个方向就可以了.说是搜索题倒是有点意思,因为要查重. 不过c ...

  3. 第9期《jmeter接口自动化实战》零基础入门!

    2019年 第9期<jmeter接口自动化实战>课程,12月6号开学! 上课方式:QQ群视频在线教学 本期上课时间:12月6号-1月18号,每周五.周六晚上20:00-22:00 报名费: ...

  4. Three.js 快速上手以及在 React 中运用[转]

    https://juejin.im/post/5ca22692f265da30a53d6656 github 的地址 欢迎 star! 之前项目中用到了 3D 模型演示的问题,整理了一下之前学习总结以 ...

  5. vs开启,Windows 10磁盘占用100%解决办法

    https://www.cnblogs.com/time-is-life/p/8888441.html 最后把Home Group相关的服务都改成禁用. 注意: 即使这两个服务没有启动也不行, 一定要 ...

  6. flutter、rn、uni-app比较

    前言 每当我们评估新技术时要问的第一个问题就是“它会给我们的业务和客户带来哪些价值?”,工程师们很容易对闪闪发光的新事物着迷,却经常会忽略这些新事物其实可能对我们的客户没有任何好处,反而只会让现有的工 ...

  7. Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍

    Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍 轻拍标签栏中的About标签,进入关于页面,如图1.8和图1.9所示.它是对应用程序介绍的页面. 该页面源自Views文 ...

  8. 虚拟机 /dev/mapper/centos-root 动态扩容

    [root@bogon ~]# df -h Filesystem Size Used Avail Use% Mounted on .2G .2G 51M % / devtmpfs 908M 908M ...

  9. IfcEdge

    /* Generated By: IFC Tools Project EXPRESS TO JAVA COMPILER: Do not edit this file!! */ package ifc2 ...

  10. 【SpringBoot】SpringBoot与Thymeleaf模版(六)

    ---恢复内容开始--- 模板引擎的思想 模板是为了将显示与数据分离,模板技术多种多样,但其本质都是将模板文件和数据通过模板引擎生成最终的HTML代码. Thymeleaf介绍 Thymeleaf是适 ...