链接
https://acm.ecnu.edu.cn/contest/292/problem/A/
题意
操作 1:将任意一个 “X” 替换为 “aX”
操作 2:将任意一个 “X” 替换为 “aXbX”
操作 3:删除任意一个 “X”
初始仅有一个 “X”
仅包含 “a”,“b” 的字符串 S S S,如果 S S S 中的某个 “a” 既可以通过操作 1 得到,又可以通过操作 2 得到,输出 Sad Fang,不能打出字符串 S S S,输出 Dead Fang,否则输出 Happy Fang
思路
1)每个前缀都有 c n t [ " a " ] > c n t [ " b " ] cnt["a"]>cnt["b"] cnt["a"]>cnt["b"],否则 Dead
2)最后一个以 “b” 结尾的前缀有 c n t [ " a " ] < = c n t [ " b " ] cnt["a"]<=cnt["b"] cnt["a"]<=cnt["b"],否则 Sad
其余情况均为 Happy
代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
char s[N];
int f,t,cnt[200];
int main() {
int T;
scanf("%d",&T);
while(T--) {
scanf("%s",s+1);
int n=strlen(s+1);
cnt['a']=cnt['b']=0;
f=t=0;
for(int i=1;i<=n;i++) {
cnt[s[i]]++;
if(s[i]=='b') t=cnt['a'];
if(s[i]=='b'&&cnt['b']>cnt['a']) {f=2;break;}
}
if(f!=2&&cnt['a']>cnt['b']&&t>cnt['b']) f=1;
if(cnt['b']==0) f=0;
if(f==0) puts("Happy Fang");
else if(f==1) puts("Sad Fang");
else puts("Dead Fang");
}
return 0;
}