CF1754A Technical Support
简单的问题。
Description
给你一串,内含 Q 与 A 代表问题与回答。如果一个串是合法的,那么要求一个问题至少要有一个回答,回答位置必须在问题位置之后。问原串是否合法。
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.
(点点

浙公网安备 33010602011771号