可达鸭学习平台思维题库---------破劫之战

该编程问题要求处理一个仅包含abc的字符串,在一系列字符修改操作后,计算仍然存在的连续abc序列数量。初始字符串长度和操作次数给定,每次操作指定位置的字符变化。程序通过遍历字符串并跟踪连续的abc序列来动态更新结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

破劫之战

时间限制:1秒        内存限制:128M

题目描述

世界遭受了巨大的劫难,现在只有将劫难消除,世界才能恢复和平。

小可掌握了修改这个世界的最终权限。为了方便描述这个世界的状态,小可将其表示为一个只由abcabc三个小写字母组成的字符串。对于这个世界,一段连续的abcabc即为一个。小可可以无限次改变每个字符,将其变成abcabc三个字母中的其中一个。但是有一股邪恶的力量也拥有了改变世界的力量,同样在修改这个世界的状态。

小可给了你这个世界最初的状态,以及qq次操作。对于每次操作,请你告诉小可还有多少个劫。

由于小可在修改这个世界的状态,邪恶的力量也在修改这个世界的状态,每次操作,劫的数量可能增加,也可能减少或者不变。所有操作结束后劫的数量不一定为00。

输入描述

第一行两个正整数n,q(1≤n,q≤10​5​​),代表字符串长度为n,有q次修改。

第二行一个字符串,只由abcabc三种字符组成。

接下来q行,每行一个正整数i(1≤i≤n)和一个字符,代表将位置i上的字符修改为c。这里默认字符串下标从1开始。

输出描述

对于每个操作,输出对于目前的状态,还有多少劫。

样例输入

9 10
abcabcabc
1 a
1 b
2 c
3 a
4 b
5 c
8 a
9 b
1 c
4 a

样例输出

3
2
2
2
1
2
1
11
1
0

提示

样例中:

操作1 a,状态变为abcabcabc,还有3个劫。

操作1 b,状态变为bbcabcabc,还有2个劫。

操作2 c,状态变为bccabcabc,还有2个劫。

操作3 a,状态变为bcaabcabc,还有2个劫。

操作4 b,状态变为bcabbcabc,还有1个劫。

操作5 c,状态变为bcabccabc,还有2个劫。

操作8 a,状态变为bcabccaac,还有1个劫。

操作9 b,状态变为bcabccaab,还有1个劫。

操作1 c,状态变为ccabccaab,还有1个劫。

操作4 a,状态变为ccaaccaab,还有0个劫。

分析:

这个题目,他实际就是让我们判断:

在操作后,有多少个连续的abc

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,q,a,disaster;
char s[N],c;
bool judge(){
	if(s[a]=='a'){
		if(s[a+1]=='b'&&s[a+2]=='c') return true;
		return false;
	}
	else if(s[a]=='b'){
		if(a==1) return false;
		else if(s[a-1]=='a'&&s[a+1]=='c') return true;
		return false;
	}
	else{
		if(a<=2) return false;
		else if(s[a-2]=='a'&&s[a-1]=='b') return true;
		return false;
	}
}
int main(){
	scanf("%d%d",&n,&q);
	scanf("%s",s+1);
	int len=strlen(s+1); 
	for(int i=1;i<=len-2;i++) if(s[i]=='a'&&s[i+1]=='b'&&s[i+2]=='c') disaster++;
	while(q--){
		scanf("%d %c",&a,&c);
		bool before=judge();
		s[a]=c;
		bool after=judge();
		if(!before&&after) disaster++;
		else if(before&&!after) disaster--;
		printf("%d\n",disaster);
	}
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值