传送门
由于需要打死每个怪物,打死第 i i i个怪物需要攻击 k i k_i ki次,其中
k i = b [ i ] / A + ( b [ i ] % A ! = 0 ) k_i=b[i]/A+(b[i]\%A!=0) ki=b[i]/A+(b[i]%A!=0)
我们累加所有怪物的 k i k_i ki,然后直接去和主角血量 A A A做比较吗??
当然不是,因为最后一次战斗后,主角的血量是负数也无所谓
所以我们记录一个怪物最大的 a i a_i ai记作 m x mx mx,把这个 m x mx mx留在最后一次打
那么只需要在打最后一次之前,血量大于零即可,写成式子就是
( ∑ i = 1 n k i ∗ a ) − m x > B (\sum\limits_{i=1}^{n}k_i*a)-mx>B (i=1∑nki∗a)−mx>B
#include
using namespace std;
#define int long long
const int maxn = 3e5+10;
int a[maxn],b[maxn],t,n;
signed main()
{
cin >> t;
while( t-- )
{
int A,B;
scanf("%lld%lld",&A,&B);
int nowa = 0,mx = 0;
cin >> n;
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
for(int i=1;i<=n;i++) scanf("%lld",&b[i]);
for(int i=1;i<=n;i++)
{
int ci = b[i]/A+(b[i]%A!=0);
nowa += ci*a[i];
mx = max( mx,a[i] );
}
if( nowa-mx>B ) cout << "NO\n";
else cout << "YES\n";
}
}