输入样例1:
3
6 10 4 0
CCDCDD
4 1 2 0
CCCC
4 2 1 0
DCCD
输出样例1:
Case #1: YES
Case #2: YES
Case #3: NO
样例1解释
在 Case 1 中,一共有 1010 份狗粮和 44 份猫粮。
- 前两只动物是猫,喂食它们后,还剩下 22 份猫粮。
- 接下来是一只狗,喂食它后,还剩下 99 份狗粮。
- 然后是一只猫,喂食它后,还剩下 11 份猫粮。
- 最后是两只狗,喂食它们后,还剩下 77 份狗粮。
所有狗都被喂食。
在 Case 2 中,没有狗,因此,所有狗(00 只)都被喂食了。
在 Case 3 中,第二只狗前面的猫得不到喂食,所有第二只狗也没法得到喂食。
输入样例2:
2
12 4 2 2
CDCCCDCCDCDC
8 2 1 3
DCCCCCDC
输出样例2:
Case #1: YES
Case #2: NO
样例2解释
在 Case 1 中,每只狗喂食完毕后,都会额外得到两份猫粮。
- 首先是一只猫,喂食它后,还剩下 11 份猫粮。
- 接下来是一只狗,喂食它后,还剩下 33 份狗粮和 33 份猫粮。
- 接下来是三只猫,喂食它们后,还剩下 33 份狗粮和 00 份猫粮。
- 接下来是一只狗,喂食它后,还剩下 22 份狗粮和 22 份猫粮。
- 接下来是两只猫,喂食它们后,还剩下 22 份狗粮和 00 份猫粮。
- 接下来是一只狗,喂食它后,还剩下 11 份狗粮和 22 份猫粮。
- 接下来是一只猫,喂食它后,还剩下 11 份狗粮和 11 份猫粮。
- 接下来是最后一只狗,喂食它后,还剩下 00 份狗粮和 33 份猫粮。
所有狗都被喂食。
在 Case 2 中,第二只狗前面的猫得不到喂食,所有第二只狗也没法得到喂食。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
ll t,n,d,c,m;
string s;
int main(){
scanf("%lld",&t);
for(int i=1;i<=t;i++){
int flag=1,p=1;
scanf("%lld%lld%lld%lld",&n,&d,&c,&m);
cin>>s;
for(int j=0;j<n;j++){
char ch=s[j];
if(ch=='D'){
if(flag==0){
p=0;
printf("Case #%d: NO\n",i);
break;
}
if(d>0) d--,c+=m;
else{
p=0;
printf("Case #%d: NO\n",i);
break;
}
}
else{
if(c>0) c--;
else flag=0;
}
}
if(p) printf("Case #%d: YES\n",i);
}
return 0;
}