经验:模拟题尽量在纸上写个伪代码,方便整理思路和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;
}