传送门: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. 三代码使用QScrollArea

    QScrollArea是QT封装好的一个滑动界面类 构造函数如下: 指定一个父对象就行,构造函数提供一个滑动的区域,但是这个区域里是没有内容的,构造函数介绍里面让我们看setWidget()这个函数, ...

  2. 14.5、redis-sentinel高可用

    1.redis主从同步配置: (0)主机配置: 服务器名称 ip地址 实例6379 实例6380 实例6381 controller-node1 172.16.1.90 主 从 从 (1)确定主从: ...

  3. 26、mysqlsla慢查询日志分析工具

    1.介绍: mysqlsla是hackmysql.com推出的一款MySQL的日志分析工具,可以分析mysql的慢查询日志.分析慢查询非常好用,能针 对库分析慢查询语句的执行频率.扫描的数据量.消耗时 ...

  4. Mybatis学习(8)动态sql语句

    Mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类: 1. if 语句 (简单的条件判断) 2. ...

  5. buu 红帽杯 XX

    一.拖入ida,静态分析 __int64 __fastcall sub_7FF65D4511A0(__int64 a1, __int64 a2) { signed __int64 v2; // rbx ...

  6. PID算法控制直流电机笔记

    1.将偏差的比例.积分和微分通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器称为PID控制器.简单说就是根据系统的误差,利用比例.积分.微分计算出控制量进行控制. 2.为什么需要P ...

  7. ARTS第五周

    -第五周.这两周在复习大学里的课程,发现当时觉得课上很多看不懂的,现在看起来轻松多了,也带来了新的感悟. 1.Algorithm:每周至少做一个 leetcode 的算法题2.Review:阅读并点评 ...

  8. Selenium启动Firefox示例(java版)

    本文示例使用selenium启动Firefox,并将浏览器窗口最大化,在百度搜索框内输入"HelloWorld",最后点击搜索按钮. 源代码如下: 1 package com.se ...

  9. YAOI Round #7 题解

    前言 比赛链接: Div.1 : http://47.110.12.131:9016/contest/16 Div.2 : http://47.110.12.131:9016/contest/15 D ...

  10. C语言:整数保存 原码 反码 补码

    #include <stdio.h> /* 本题结果为:-4 short类型占据2字节 ;赋值后实际占据了3个字节,所以有溢出警告提示,结果只保留0xfffc 保存二进制:1111 111 ...