题解:CF1941C(C. Rudolf and the Ugly String)

题解:CF1941C(C. Rudolf and the Ugly String)

题目翻译:给定一个字符串,请你求出最少需要删除几个字符才能使得该字符串内不存在 mappie

我们可以先在该字符串内找到所有的子串 mapie,并删除中间的 p,这样可以用删除 1 1 1 个字符的代价干掉一个 map 一个 pie(共个)。显然这样的字符串不会重叠出现

之后,剩下的所有 mappie不存在重叠。这时,我们可以找到所有的子串 map 和 子串 pie,并删去中间的 ai,这样我们可以用删除 1 1 1 个字符的代价干掉一个 map 一个 pie(共个)。

显然,这样选是最优的。

我们该如何实现呢?我们不能真的用字符串去模拟删除操作,但是我们可以通过枚举形如 mapiemappie 的子串的数量得出。具体的,记 mappie 的总数量为 a n s ans ansmapie 的数量为 a n s 2 ans2 ans2正常情况下答案应该为 a n s + a n s 2 ans+ans2 ans+ans2,但由于每出现一个 mapie 就会对应的出现一组 mappie,而我们并没有进行去重,所以每个 mapie 在计算 a n s 2 ans2 ans2 之前就已经被统计了两次,所以应该减去一次,即最终的答案应该是 a n s − a n s 2 ans-ans2 ansans2

代码:

#include<bits/stdc++.h>
using namespace std;
int t;
string x;
int main(){
	scanf("%d",&t);
	while(t--){
		cin>>x>>x;
		int l=x.size(),ans=0,ans2=0;
		for(int i=1;i<l-1;i++){
			if(x[i-1]=='m'&&x[i]=='a'&&x[i+1]=='p'){
				ans++;
			}
			if(x[i-1]=='p'&&x[i]=='i'&&x[i+1]=='e'){
				ans++;
			}
			if(i!=1&&i!=l-2){
				if(x[i-2]=='m'&&x[i-1]=='a'&&x[i]=='p'&&x[i+1]=='i'&&x[i+2]=='e'){
					ans2++;
				}
			}
		}
		printf("%d\n",ans-ans2);
	}
	return 0;
}

相关推荐

  1. CF1951E No Palindromes 题解

    2024-04-07 21:44:05       15 阅读
  2. 题解CF1946D(Birthday Gift)

    2024-04-07 21:44:05       11 阅读
  3. 题解CF1951E(No Palindromes)

    2024-04-07 21:44:05       11 阅读
  4. 题解CF1941C(C. Rudolf and the Ugly String)

    2024-04-07 21:44:05       20 阅读
  5. CF1914C Quests

    2024-04-07 21:44:05       36 阅读
  6. CF988D题解

    2024-04-07 21:44:05       11 阅读
  7. 题解CF1923D(Slimes)

    2024-04-07 21:44:05       22 阅读
  8. 题目 1971: 外出旅游

    2024-04-07 21:44:05       22 阅读
  9. CF 1901B Chip and Ribbon 学习笔记

    2024-04-07 21:44:05       44 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-07 21:44:05       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-07 21:44:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-07 21:44:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-07 21:44:05       20 阅读

热门阅读

  1. 真正的力量:实力与人际关系的平衡艺术

    2024-04-07 21:44:05       18 阅读
  2. Go rand 随机数

    2024-04-07 21:44:05       15 阅读
  3. 19.删除链表的倒数第N个节点

    2024-04-07 21:44:05       12 阅读
  4. C++ [NOIP2006 普及组] 明明的随机数

    2024-04-07 21:44:05       17 阅读
  5. RabbitMQ交换机类型!!!

    2024-04-07 21:44:05       20 阅读
  6. 投资回报率ROI是什么意思?

    2024-04-07 21:44:05       19 阅读
  7. 《牛客》-C小红的字符串构造

    2024-04-07 21:44:05       17 阅读
  8. jq的跳转方法有哪些(补)

    2024-04-07 21:44:05       15 阅读
  9. 小朋友排队(归并排序c++)

    2024-04-07 21:44:05       18 阅读