传送门: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. 5、基本数据类型(str)

    5.1.字符串: 1.n1 = "lc" n2 = 'root' n3 = """chang""" n4='''tom' ...

  2. css 字体阴影和边框阴影

    字体阴影 text-shadow: 2px 2px 2px #7a7e81; 边框阴影 box-shadow: 2px 2px 2px #7a7e81;

  3. 13.9示例:有理数Rational类

    要点提示:java提供了表示整数和浮点数的数据类型,但是没有提供表示有理数的数据类型. public Rational extends Number implements Comparable {}

  4. Java hashCode&&equals

    /** 为保证向Set中添加的对象其所在的类必须要重写hashCode和equals方法: 重写的原则:hashCode和equals尽量保持一致性: 两个相同的对象equals()返回true时,那 ...

  5. Network:java中文转byte出现负数问题

    字节的释义 字节(Byte) 是计算机信息技术用于计量存储容量的一种计量单位,通常情况下 1字节 = 8位(bit),也表示一些计算机编程语言中的数据类型和语言字符. 字符与字节 ASCII码:1个英 ...

  6. XCTF python-trade

    一.查看文件类型 后缀名为pyc,说明是python字节码文件,python和java在编译方式上很像,都是编译兼并解释型,先编译成字节码,在虚拟机上解释成机器代码. 二.反编译 三.写个exp 分析 ...

  7. buu 达芬奇 && ROT

    一.达芬奇 百度了下电影简介,发现了斐波那契数列,同时发现密文是由斐波那契数列移动而来的,有点像base64变种 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 ...

  8. Leetcode No.119 Pascal's Triangle II(c++实现)

    1. 题目 1.1 英文题目 Given an integer rowIndex, return the rowIndexth (0-indexed) row of the Pascal's tria ...

  9. phpstudy后门复现遇到的坑

    这几天遇到一个phpstudy后门的站之前没复现过,结果遇到了深坑记录一下 首先用这个脚本去验证是没问题的: https://github.com/NS-Sp4ce/PHPStudy_BackDoor ...

  10. 家庭账本开发day10

    系统的增删改查基本功能完成,进行业务流程完整测试.完善相关功能,编写搜索 功能,通过日期,类型等关键字进行搜索,对搜索到的数据表格完成重载 // 监听搜索操作        form.on('subm ...