列表

详情


NC200377. 王宁宁宁

描述

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

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

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

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

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

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

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

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

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

输入描述

有多组输入。

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

输出描述

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

示例1

输入:

wnnn
hahahaaaaaaaaaa

输出:

w3n
hahah10a

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang 3.9) 解法, 执行用时: 87ms, 内存消耗: 1352K, 提交时间: 2019-12-14 13:02:19

#include<stdio.h>
#include<math.h>
int weishu[1000];
int main(){
	char s[100100],t;
	int len,temp,i = 0;
	while(scanf("%s",s)!=EOF){
		i = 0;
		while(s[i]!='\0'){
			len = 1;
			t = s[i];
			i++;
			while(s[i]==t){
				i++;
				len++;
			}
			if( len == 1)
				printf("%c",t);
			else if(len == 2)
				printf("%c%c",t,t);
			else printf("%d%c",len,t);	
		}
		printf("\n");
	getchar();
	}
	return 0;
} 

C(gcc 7.5.0) 解法, 执行用时: 55ms, 内存消耗: 1360K, 提交时间: 2023-03-28 19:59:21

#include<stdio.h>
int main()
{
char a[100005];
while(~scanf("%s",&a))
{
   int s=1;
   for(int i=0;a[i]!='\0';i++)
{
   if(a[i]==a[i+1])
   s++;
   else 
{
   if(s==1)
{
   printf("%c",a[i]);
}
   else if(s==2)
{
   printf("%c%c",a[i],a[i]);
     s=1;
}
 else if(s>2)
{
printf("%d",s);
     printf("%c",a[i]);
     s=1;
}
}
}
printf("\n");
}
} 

C++14(g++5.4) 解法, 执行用时: 256ms, 内存消耗: 5860K, 提交时间: 2019-12-29 18:41:39

#include<bits/stdc++.h>
using namespace std;
int main()
{
	string ch;
	while(cin>>ch)
	{
		int s=1;
		int len=ch.length();
		for(int i=0;i<len;i++)
		{
			if(ch[i]!=ch[i+1])
			{
				if(s==2) cout<<ch[i];
				else if(s>2) cout<<s;
				cout<<ch[i];
				s=1;
			}
			else s++;
		}
		cout<<endl;
	}
	return 0;
} 

C++11(clang++ 3.9) 解法, 执行用时: 234ms, 内存消耗: 1400K, 提交时间: 2019-12-14 15:39:56

#include<bits/stdc++.h>
using namespace std;
int main()
{
	char a[100005];
	int p;
	while(cin>>a)
	{
		for(int i=0;a[i]!='\0';i++)
		{
			p=1;
			while(a[i]==a[i+1])
			{
				i++;p++;
			}
			if(p>2) cout<<p;
			else if(p==2) cout<<a[i];
			cout<<a[i];
		}
		cout<<endl;
	}
	
    return 0;
}

Python(2.7.3) 解法, 执行用时: 1368ms, 内存消耗: 3912K, 提交时间: 2019-12-13 23:10:13

while True:
    try:
        print(reduce(lambda(s,p,n),c:(s,p,n+1)if c==p else(s+(str(n)if n>2else(n-1)*p)+p,c,1)if n>0else(s,c,1),raw_input()+'_',('','',0))[0])
    except:
        break

上一题