2023.12.5 codeforces Div.3 B.YetnotherrokenKeoard

首先讲述一下这道题的题意:

1.录入一段字符。

2.如果录入的是字符b,则删除该字符前面离该字符最近的小写字母,如果没有,则忽视。

3.如果录入的是字符B,则删除该字符前面离该字符最近的大写字母,如果没有,则忽视。

4.最后将剩下的字符打印出来,否则打印空行。


其次讲述一下我个人的做题思路:

1.首先肯定是创建一个字符数组arr来录取字符串。

2.之后便是遍历arr的每一个字符。

3.此时我创建了两个数组,brr,crr用于分别记录在arr中小写字母和大写字母的下标,并用flag1与flag2来记录数组的大小。

4.此时遍历有三种情况:

第一种:遍历到非B与b的其他字母,则将其下标记录到brr与crr中,并让flag自增。

第二种:遍历到b,此时,我用字符','来标记arr中b与B的位置以及被删除的字符的位置。如果flag1大于等于0,就让此时arr[brr[flag1]]等于',',并让flag1自减。

第三种:遍历到B,与二同理,代码如下:

5.最后就是把arr遍历跳过字符 ',' 输出。

6.提醒:别忘了换行哦。


下面是完整代码:


#include <iostream>
#include <algorithm>
using namespace std;
char arr[1000001] = { 0 };
int brr[1000001] = { 0 };
int crr[1000001] = { 0 };
int main() {
	int t;
	cin >> t;
	while (t--) {
		int flag1 = -1;
		int flag2 = -1;
		scanf("%s", &arr);
		int l = strlen(arr);
		
		for (int i = 0; i < l; i++) {
			if (arr[i] == 'b') {
				arr[i] = ',';
				if (flag1 >= 0) arr[brr[flag1--]] = ',';
			}
			else if (arr[i] == 'B') {
				arr[i] = ',';
				if (flag2 >= 0) arr[crr[flag2--]] = ',';
			}
			else if (arr[i] >= 'a' && arr[i] <= 'z')brr[++flag1] = i;
			else if (arr[i] >= 'A' && arr[i] <= 'Z')crr[++flag2] = i;

		}
		for (int i = 0; i < l; i++) {
			if (arr[i] != ',')printf("%c", arr[i]);
		}
		printf("\n");
	}
	return 0;
}

大一蒟蒻第一次写博客,大神勿喷。
  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Codeforces Round 894 (Div. 3) 是一个Codeforces举办的比赛,是第894轮的Div. 3级别比赛。它包含了一系列题目,其中包括题目E. Kolya and Movie Theatre。 根据题目描述,E. Kolya and Movie Theatre问题要求我们给定两个字符串,通过三种操作来让字符串a等于字符串b。这三种操作分别为:交换a中相同位置的字符、交换a中对称位置的字符、交换b中对称位置的字符。我们需要先进行一次预处理,替换a中的字符,然后进行上述三种操作,最终得到a等于b的结果。我们需要计算预处理操作的次数。 根据引用的讨论,当且仅当b[i]==b[n-i-1]时,如果a[i]!=a[n-i-1],需要进行一次操作;否则不需要操作。所以我们可以遍历字符串b的前半部分,判断对应位置的字符是否与后半部分对称,并统计需要进行操作的次数。 以上就是Codeforces Round 894 (Div. 3)的简要说明和题目E. Kolya and Movie Theatre的要求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Codeforces Round #498 (Div. 3) (A+B+C+D+E+F)](https://blog.csdn.net/qq_46030630/article/details/108804114)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Codeforces Round 894 (Div. 3)A~E题解](https://blog.csdn.net/gyeolhada/article/details/132491891)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值