CF1754A Technical Support

题链:cf luogu

简单的问题。

Description

给你一串,内含 QA 代表问题与回答。如果一个串是合法的,那么要求一个问题至少要有一个回答,回答位置必须在问题位置之后。问原串是否合法。

Analysis

显然类似栈的思想。

易知有贪心思路:当有问题 \(\text{A}\) 已经出现但还未回答时不会使另一已经回答的问题 \(\text{B}\) 增加一条回答,而应该回答当前未回答的问题 \(\text{A}\)

直接一个 tp 统计已经出现并未解决的问题数,按照贪心思路匹配就行了。

Code

#include <stdio.h>
int n; char s[105];
inline bool Solve() {
	scanf("%d %s", &n, s + 1); int tp = 0;
	for (int i = 1; i <= n; ++i)
		if (s[i] == 'Q') ++tp; //统计 Q 个数
		else if (tp > 0) --tp; //没有未回答的问题了,对已回答的问题进行多次回答
	return tp == 0;
}
int main(void) {
	int T; for (scanf("%d", &T); T--; ) puts(Solve() ? "Yes" : "No");
	return 0;
}

The end. Thanks.

(点点

posted @ 2022-10-24 15:41  Dry_ice  阅读(41)  评论(0)    收藏  举报