PAT A1112 Stucked Keyboard (20 分)

#include<bits/stdc++.h>
using namespace std;
int  n,numm,ccd,post[100001],ins[100001],dd[100001],a,b,c,d;
char s[1001];
map<char,int>mp,meet1,inq,inq2;
struct node{
	char c1;int w1;
friend bool operator < (node aa,node bb){
	return aa.w1<bb.w1;
}
};

int main(){
cin>>n;
scanf("%s",s);
int ii=0;
while(ii<strlen(s)-1){
	int yyy=1;
	while(s[ii]==s[ii+1]){
	ii++;yyy++;}
	ii++;
	if(!meet1[s[ii]])meet1[s[ii]]=ii;
	//cout<<"yu"<<endl;
	mp[s[ii-1]]+=(yyy/n);
	if(yyy%n!=0){
		if(!inq2[s[ii-1]]){
			ccd++;
		inq2[s[ii-1]]=ccd;}
		}
}
node ttty[3000];int kk1=0,km1=0;
for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++){
//	cout<<it->first<<" "<<it->second<<endl;
if(!inq2[it->first]&&mp[it->first]){
//printf("%c",it->first);
ttty[++kk1].c1=it->first;
km1++;
if(!inq[it->first])
inq[it->first]=km1;
ttty[kk1].w1=meet1[it->first];
}
}
sort(ttty+1,ttty+1+kk1);
for(int i=1;i<=kk1;i++)cout<<ttty[i].c1;
cout<<endl;
ii=0;
while(ii<strlen(s)){
	if(inq[s[ii]]){
		int ok=1;
		for(int j=ii;j<=ii+n-1;j++)if(s[j]!=s[ii])ok=0;
		if(ok){
			printf("%c",s[ii]);
			ii=ii+n-1;
		}
	}
	else printf("%c",s[ii]);
	++ii;
}
	return 0;
}

!!!测试点2,4:注意输出可能坏键的字符顺序是按照字符串中出现的顺序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值