C. Hamburgers

经验:模拟题尽量在纸上写个伪代码,方便整理思路和debug

const int N = 1e6 + 5;
int t;

int main()//物尽其用,模拟题还是现在纸上写出伪代码,方便整理思路和debug
{
	string s;
	while (cin >> s)
	{
		ll numa, numb, numc, feia, feib, feic,r;
		ll ha=0,hb=0,hc=0;//一套需要多少
		cin >> numa >> numb >> numc >> feia >> feib >> feic >> r;
		for (auto i : s)
		{
			if (i == 'B')ha++;
			else if (i == 'S')hb++;
			else hc++;
		}
		ll ans = 0;
		int k1 = 150, k2 = 150, k3 = 150;//p1:先不用r,物尽其用
		if (ha)k1 = numa / ha;else numa = 0;if (hb)k2 = numb / hb;else numb = 0;if (hc)k3 = numc / hc;else numc = 0;
		k1 = min(k1, k2);k1 = min(k1, k3);
		ans += k1;
		numa -= (k1 + 1)*ha;numb -= (k1 + 1)*hb;numc -= (k1 + 1)*hc;
		//debug(ans);
		while ((numa<0||numb<0||numc<0)&&r >= 0)
		{
			if (numa== -ha && numb == -hb && numc == -hc)break;//每个原材料都是买,直接算有几个周期
			int feiyong = 0;
			if (numa < 0)feiyong += -numa * feia;
			if (numb < 0)feiyong += -numb * feib;
			if (numc < 0)feiyong += -numc * feic;
			//debug(numa);
			//debug(numc);
			if (r - feiyong >= 0)
			{
				ans++;
				r -= feiyong;
				if (numa>0)numa -= ha;else numa = -ha;
				if (numb>0)numb -= hb;else numb = -hb;
				if (numc>0)numc -= hc;else numc = -hc;
			}
			else break;
		}
		ans += r / (ha*feia + hb*feib + hc*feic);
		cout << ans << endl;
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值