王宁宁宁

链接:https://ac.nowcoder.com/acm/contest/2763/E
来源:牛客网

题目描述

暑假训练已经结束了,暑假训练时间充不充足,训练强度大不大,训练提升大不大;

训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大;

训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大;

训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大;

训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,我相信大家自己心里都是有数的,说到底我们提升的动力还是来自于自己的毅力。希望大家能够在新的学期能够再接再厉,成绩不理想不要紧,坚持下去总有一天会出头,得到你想要的东西的!与君共勉。

—— 王宁宁宁 发表于 08-25 19:32, 来自群 2018CUST ACM

以上摘自王宁宁宁发在18级校队群的群公告,如你所见,王宁宁宁是个很啰嗦的人。为了他的毕业证,你需要将他的话缩写后传达下去。

现在,王宁宁宁将发表一段洋洋洒洒的言论。为了减轻你的工作负担,他这次只说英文(^v^考虑到如果有中文字符,C/C++选手可能会疯)。

同时,为了不引起歧义,你的缩写规则很简单:对于一段连续出现n次的字母X,你可以用nX替换,例如aaaa可以用4a替换。请你用最少的替换次数,使得缩写后的字符串长度最短。

输入描述:

有多组输入。

每组输入一行,代表原始字符串(王宁宁宁的言论),仅由英文字母组成,长度不超过100000。

输出描述:

对于每组输入,输出一行,代表符合题意的缩写后的字符串。
示例1

输入

复制
wnnn
hahahaaaaaaaaaa

输出

复制
w3n
hahah10a

备注:

用最少的替换次数,使得缩写后的字符串长度最短。即在字符串最短的条件下,要求替换次数最少。


题解:这道题不难,但是有一个卡点,要注意:它说的是用最少的替换次数,使得字符串最短。也就是说字符串同样最短的情况下,要用最少的替换次数。
所以!连续出现2次的的字母就不用替换了,因为替换后长度还是一样的,还是2。(注意注意不要被卡在这里了,看清题意)
#include <bits/stdc++.h>
 
using namespace std;
 
int main(){
    string s;
    while(cin >> s){
        int len=s.size();
        int count=1;
        for(int i=0;i<len;i++){
            if(s[i]==s[i+1]){
                count++;
            }
            else{
                if(count==1)    printf("%c",s[i]);
                else if(count==2){          //字母只连续出现2次,不替换,直接输出
                    printf("%c%c",s[i],s[i]);
                    count=1;
                }  
                else if(count>2){        //大于2的时候输出
                    printf("%d%c",count,s[i]);
                    count=1;
                }
            }
        }
        printf("\n");
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/shiliuxinya/p/12168629.html
今日推荐