AcWing4118. 狗和猫

这是一个关于分配狗粮和猫粮以确保每只狗都能被喂食的程序问题。输入包含动物顺序和粮食数量,输出是判断所有狗是否都得到了喂食。程序通过遍历动物类型并管理粮食库存来做出判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

输入样例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 份猫粮。

  1. 前两只动物是猫,喂食它们后,还剩下 22 份猫粮。
  2. 接下来是一只狗,喂食它后,还剩下 99 份狗粮。
  3. 然后是一只猫,喂食它后,还剩下 11 份猫粮。
  4. 最后是两只狗,喂食它们后,还剩下 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 中,每只狗喂食完毕后,都会额外得到两份猫粮。

  1. 首先是一只猫,喂食它后,还剩下 11 份猫粮。
  2. 接下来是一只狗,喂食它后,还剩下 33 份狗粮和 33 份猫粮。
  3. 接下来是三只猫,喂食它们后,还剩下 33 份狗粮和 00 份猫粮。
  4. 接下来是一只狗,喂食它后,还剩下 22 份狗粮和 22 份猫粮。
  5. 接下来是两只猫,喂食它们后,还剩下 22 份狗粮和 00 份猫粮。
  6. 接下来是一只狗,喂食它后,还剩下 11 份狗粮和 22 份猫粮。
  7. 接下来是一只猫,喂食它后,还剩下 11 份狗粮和 11 份猫粮。
  8. 接下来是最后一只狗,喂食它后,还剩下 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值