链接:https://ac.nowcoder.com/acm/contest/2763/E
来源:牛客网
题目描述
暑假训练已经结束了,暑假训练时间充不充足,训练强度大不大,训练提升大不大;
训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大;
训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大;
训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大;
训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,训练强度大不大,训练提升大不大,我相信大家自己心里都是有数的,说到底我们提升的动力还是来自于自己的毅力。希望大家能够在新的学期能够再接再厉,成绩不理想不要紧,坚持下去总有一天会出头,得到你想要的东西的!与君共勉。
—— 王宁宁宁 发表于 08-25 19:32, 来自群 2018CUST ACM
以上摘自王宁宁宁发在18级校队群的群公告,如你所见,王宁宁宁是个很啰嗦的人。为了他的毕业证,你需要将他的话缩写后传达下去。
现在,王宁宁宁将发表一段洋洋洒洒的言论。为了减轻你的工作负担,他这次只说英文(^v^考虑到如果有中文字符,C/C++选手可能会疯)。
同时,为了不引起歧义,你的缩写规则很简单:对于一段连续出现n次的字母X,你可以用nX替换,例如aaaa可以用4a替换。请你用最少的替换次数,使得缩写后的字符串长度最短。
输入描述:
有多组输入。
每组输入一行,代表原始字符串(王宁宁宁的言论),仅由英文字母组成,长度不超过100000。
输出描述:
对于每组输入,输出一行,代表符合题意的缩写后的字符串。
备注:
用最少的替换次数,使得缩写后的字符串长度最短。即在字符串最短的条件下,要求替换次数最少。
题解:这道题不难,但是有一个卡点,要注意:它说的是用最少的替换次数,使得字符串最短。也就是说字符串同样最短的情况下,要用最少的替换次数。
所以!连续出现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(" "); } return 0; }