传送门:https://pintia.cn/problem-sets/994805046380707840/problems/1111914599408664577

这道字符串题,只是天梯赛L1的题,数据范围很小,一般就是暴力去做,但是要考虑将多个连续的6替换成其他的指定字符串,其实一开始的时候其实想不出来有什么比较好的思路可以去做。

感觉字符串题就是这样,明明没考啥东西,如果你基础够好,或者说有一些巧妙的方法的话,一下子就能解决,要不然你可能需要暴力写半天。

这道题后面想的思路是:找连续的6的话,我们肯定要知道这个连续的6的子串有多长,那么就可以联想到我们的最长上升子串问题,只不过这里是求一个所含有的字符都是6的子串的长度,并且是最长的“都是6子串”。

我们在最长上升子串中,如果第i个字符大于它前一个字符,dp【i】=dp【i-1】+1,否则dp【i】 = 1

A. 那在我们这个问题中,也可以这样,如果该字符不是6,则a【i】=0,如果是出现的第一个6,则a【i】=1,如果是连续出现的,那么就等于它前一个的值+1,即a【i】 = a【i-1】+1。

不过我们的问题在于,我们遇到这样一个子串的时候,是要得知它的长度的,要分小于3,在3和9中间,还有大于9三种情况来讨论。

怎么求这个的长度呢?上面A这句话的思路反过来就可以了,我们反向地对string s做一次遍历,做一次A的过程,然后在接下来正向遍历a数组的时候,在遇到这样的子串的第一个字符的位置的时候就可以立刻知道该子串有多长,然后直接不打印该子串,而是打印要替换的值,然后循环遍历i直接加上这个子串的长度,完美跳过该子串,继续打印下面该打印的字符。

题解代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 100005;
const int INF = 0x3f3f3f3f;
int k,N,mlen = INF;
string s;
int a[1005]; int main(){
#ifndef ONLINE_JUDGE
//freopen("in.txt","r",stdin);
#endif getline(cin,s);
int len = s.length();
memset(a,0,sizeof(a));
for(int i=len-1;i>=0;i--){
if(s[i] == '6' ){
if(i == len-1) a[i] = 1;
else if(s[i+1] == 0) a[i] = 1;
else a[i] = a[i+1]+1;
}
}
for(int i=0;i<len;){
if(a[i] > 9){
cout<<"27";
i += a[i];
}
else if(a[i] > 3){
cout<<"9";
i += a[i];
}
else {
cout<<s[i];
i++;
}
}cout<<endl;
return 0;
}

天梯赛 L1-058 6翻了的更多相关文章

  1. PTA 天梯赛 L1

    L1-002 打印沙漏 细节:就是在  (i>j&&i+j<r+1) 这个区间里才有空格,然后就是 for 循环   for(r=1; ;r+=2)  条件不满足之后还会再 ...

  2. 天梯赛L1 题解

    L1-001 Hello World (5 分) 这道超级简单的题目没有任何输入. 你只需要在一行中输出著名短句“Hello World!”就可以了. AC代码:(直接输出记性) #include & ...

  3. PAT L1 049 天梯赛座位分配

    天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位 ...

  4. 『ACM C++』 PTA 天梯赛练习集L1 | 052-053

    今日刷题,水题水题 ------------------------------------------------L1-052------------------------------------ ...

  5. 『ACM C++』 PTA 天梯赛练习集L1 | 048-49

    今日刷题048-049 ------------------------------------------------L1-048---------------------------------- ...

  6. 『ACM C++』 PTA 天梯赛练习集L1 | 040-41

    近期安排 校赛3.23天梯赛3.30华工校赛 4.21省赛 5.12 ------------------------------------------------L1-040----------- ...

  7. 『ACM C++』 PTA 天梯赛练习集L1 | 001-006

    应师兄要求,在打三月底天梯赛之前要把PTA上面的练习集刷完,所以后面的时间就献给PTA啦~ 后面每天刷的题都会把答案代码贡献出来,如果有好的思路想法也会分享一下~ 欢迎大佬提供更好的高效率算法鸭~ - ...

  8. 第四届CCCC团体程序设计天梯赛 后记

    一不小心又翻车了,第二次痛失200分 1.开局7分钟A了L2-3,一看榜已经有七个大兄弟排在前面了,翻车 * 1 2.把L1-3 A了18分,留了两分准备抢顽强拼搏奖,最后五秒钟把题过了,万万没想到还 ...

  9. 【CCCC天梯赛决赛】

    cccc的天梯赛决赛,水题一样的水,中档题以上的还是没做出来.补了一下题,觉得其实也不是很难,主要是练的少. L2-1:红色预警 并查集 我做的时候想不到并查集,想到了也不一定做的出来,都是其实不难. ...

随机推荐

  1. 20、高可用数据同步工具drbd介绍

    20.1.什么是drbd: 20.2.drbd的工作原理: 20.3.drbd的同步模式: 1.实时同步模式: 2.异步同步模式: 20.4.drbd生产应用场景: 1.生产场景中drbd常用于基于高 ...

  2. hdu 1540 Tunnel Warfare 线段树 区间合并

    题意: 三个操作符 D x:摧毁第x个隧道 R x:修复上一个被摧毁的隧道,将摧毁的隧道入栈,修复就出栈 Q x:查询x所在的最长未摧毁隧道的区间长度. 1.如果当前区间全是未摧毁隧道,返回长度 2. ...

  3. Docker搭建EFK日志收集系统,并自定义es索引名

    EFK架构图 一.EFK简介 EFK不是一个软件,而是一套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用,是目前主流的一种日志系统. EFK是三个开源软件的缩写,分 ...

  4. Camunda工作流引擎简单入门

    官网:https://camunda.com/ 官方文档:https://docs.camunda.org/get-started/spring-boot/project-setup/ 阅读新体验:h ...

  5. C++智能指针之shared_ptr与右值引用(详细)

    1. 介绍 在 C++ 中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露.解决这个问题最有效的方法是使用智能指针(smart pointer).智能指针是存储指向动态分配(堆)对象指针 ...

  6. SpringCloud的Ribbon自定义负载均衡算法

    1.Ribbon默认使用RoundRobinRule策略轮询选择server 策略名 策略声明 策略描述 实现说明 BestAvailableRule public class BestAvailab ...

  7. SQL 查询并不是从 SELECT 开始的

    原文地址:SQL queries don't start with SELECT 原文作者:Julia Evans(已授权) 译者 & 校正:HelloGitHub-小熊熊 & 卤蛋 ...

  8. 「CF505E」 Mr. Kitayuta vs. Bamboos

    「CF505E」 Mr. Kitayuta vs. Bamboos 传送门 如果没有每轮只能进行 \(k\) 次修改的限制或者没有竹子长度必须大于 \(0\) 的限制那么直接贪心就完事了. 但是很遗憾 ...

  9. Java基础00-IO流27

    1. File 1.1 File类概述和构造方法 File的构造方法:这三个构造方法可以做同样的事情 代码示例: public class File1 { public static void mai ...

  10. MapReduce学习总结之架构

    一.MapReduce1.x架构 1)jobTracker:JT 作业的管理者 将作业分解成一堆任务:Task(MapTask和ReduceTask) 将任务分派给TaskTracker(TT)运行 ...