题目链接

https://atcoder.jp/contests/agc037/tasks/agc037_e

题解

天哪,这场题目难度大概真的是乱序吧。。。。A<C<E<D<B<F? 后悔考场上没看看这题= =
首先在一般情况下,不妨设串中出现过的最小字符为\(a\), 最长连续的\(a\)的长度是\(l\), 那么显然答案的前至少\(2^{k-1}\times l\)位都是\(a\).
然后发现,假设确定了第一步的操作,那么后面的操作都是唯一确定的,且可以在\(O(n)\)时间内得到。
于是枚举一下第一步操作
然后。。就做完了啊。。。
时间复杂度\(O(N^2)\).

但是有个比较恶心的细节:如果这个字符串末尾有若干个字符\(a\)要特殊处理(具体见代码)。并且即便末尾\(a\)的长度不足\(l\)也有可能成为最优解(因为相当于省去了一次操作,应该是达到\(\frac{l}{2}\)就有可能)。
例如以下数据:

8 1
baaacbaa

因此WA了4发。

代码

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cassert>
using namespace std;void read(int &x)
{int f=1;x=0;char s=getchar();while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}x*=f;
}const int N = 5000;
char a[N+3];
char ans[N+3][N+3];
char mnc;
int n,m,num;bool cmp(int x,int y)
{for(int i=1; i<=n; i++){if(ans[x][i]<ans[y][i]) return true;if(ans[x][i]>ans[y][i]) return false;}return false;
}int main()
{scanf("%d%d",&n,&m);scanf("%s",a+1);mnc = 'z'; for(int i=1; i<=n; i++) mnc = min(mnc,a[i]);if(m>=14) {for(int i=1; i<=n; i++) printf("%c",mnc); return 0;}int len = 0,mxl = 0;for(int i=1; i<=n; i++){if(a[i]!=mnc) len = 0;else len++;if(len>mxl) {mxl = len;}}len = 0; num = 0;for(int i=1; i<=n; i++){if(a[i]!=mnc) len = 0;else len++;if(i==n){num++;int tmp = min(n,len*(1<<m));for(int j=1; j<=tmp; j++) ans[num][j] = mnc;for(int j=tmp+1,k=n-len; j<=n; j++,k--) ans[num][j] = a[k];}if(len==mxl){num++;int tmp = min(n,len*(1<<m-1));for(int j=1; j<=tmp; j++) ans[num][j] = mnc;for(int j=tmp+1,k=i+1; j<=n; j++,k++){ans[num][j] = a[k<=n?k:2*n+1-k];}}}
//  for(int i=1; i<=num; i++) {for(int j=1; j<=n; j++) printf("%c",ans[i][j]); puts("");}int fans = 1;for(int i=1; i<=num; i++){if(cmp(i,fans)){fans = i;}}for(int j=1; j<=n; j++) printf("%c",ans[fans][j]); puts("");return 0;
}

AtCoder AGC037E Reversing and Concatenating相关推荐

  1. 【做题记录】AtCoder AGC做题记录

    做一下AtCoder的AGC锻炼一下思维吧 目前已做题数: 127 总共题数: 269 每一场比赛后面的字母是做完的题,括号里是写完题解的题 AGC001: ABCDEF (DEF) AGC002: ...

  2. AtCoder Grand Contest 021完整题解

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

  3. PAT 1074 Reversing Linked List

    1074 Reversing Linked List (25point(s)) Given a constant K and a singly linked list L, you are suppo ...

  4. ICPC / CCPC / Codeforces / AtCoder 单词本

    过不了六级的小菜鸡呜呜呜,好久没有背过单词了,都忘完了 放一些写ICPC真题 / CCPC真题 / Codeforces / AtCoder 的时候不能立刻反应过来的单词每天背一下 四舍五入 roun ...

  5. 【每日亿题#12】AtCoder Grand Contest 021 (A ~ F)全部题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 文章目录 AtCoder Grand Contest 021 题解 A. Digit Sum 2 B. ...

  6. AtCoder Beginner Contest 202 D - aab aba baa(组合计数,字典序)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Problem 有 AAA 和 aaa,BBB 个 bbb ,可以使用这 A+BA+BA+B 个字符任 ...

  7. AtCoder Beginner Contest 197 题解(A ~ F)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Rotate B - Visibility C - ORXOR D - Opposite ...

  8. AtCoder Beginner Contest 198 (A ~ F)题解

    目录 A. Div B. Palindrome with leading zeros C. Compass Walking D. Send More Money E. Unique Color F. ...

  9. 目标检测--Enhancement of SSD by concatenating feature maps for object detection

    Enhancement of SSD by concatenating feature maps for object detection BMVC 2017 本文是对SSD 的改进,通过牺牲一点速度 ...

最新文章

  1. 华为服务器内存条在主板位置,服务器主板内存
  2. Java程序员从笨鸟到菜鸟之(八十八)跟我学jquery(四)JQuery框架操作元素的属性与样式
  3. 微软面试题及答案 (很需要开放性思维啊)
  4. java 类无法实例_Java无法从类实例访问类方法
  5. GDOI2021划水记
  6. Hive找出所有科目成绩都大于某一学科平均成绩的学生
  7. ai的利与弊 辩论_为什么AI辩论失败了
  8. Qt程序的国际化支持【收藏】
  9. 安利App介绍及下载(含二维码)
  10. 爬虫_抓取猫眼电影TOP100
  11. OGG/OGV文件格式解析
  12. C4D学习笔记3-动画-动画渲染流程案例
  13. 数学建模养老保险问题matlab,全国大学生数学建模竞赛C题 企业退休职工养老金制度的改革...
  14. 51单片机检测温湿度并且上传到阿里云
  15. 对Redis中主从复制、哨兵模式和集群进行部署
  16. 小米游戏本 linux 编程键,小米笔记本安装Ubuntu后特殊键终于可用了
  17. 国标解读:关于超温保护部分(GB 4793.6-2008 测量、控制和实验室用电气设备的安全要求)
  18. 去除小数点后的.或多余的0(多个方法参考)
  19. zz国外接活网站Elance, Freelancer和ScriptLance的介绍和对比
  20. 站长说说之 seo中蜘蛛是否能抓住网站的动态页面

热门文章

  1. 【休闲游戏 实战1】推箱子PC端小游戏(附源码)
  2. Ubuntu通过windows代理上网
  3. 多次Jquery引发head.insertBefore( script, head.firstChild );
  4. 实验一 线性表、堆栈和队列的操作与实现
  5. C语言中size_t的陷阱
  6. 过滤器、拦截器、监听器的区别与使用
  7. STM32开发 -- 外部中断详解
  8. Java开发:(执行系统(例cmd)命令)Runtime.getRuntime().exec()参数解释
  9. 反卷积在神经网络可视化上的成功应用
  10. Android面试题详细整理系列(二)