1480 B.The Great Hero(模拟)

传送门

由于需要打死每个怪物,打死第 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=1nkia)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";
	}
}

你可能感兴趣的:(div题解)