Codeforces 1923B Monsters Attack! 题解

题目简述

数轴上有 n 个怪兽。最初第 i 个怪兽在 xi 位置上,且血量为 ai。你在位置 0 上。

在每秒钟会发生:

  • 你给任意怪兽发射总共 k 颗子弹,受到攻击的怪兽血量减一。
  • 血量小于等于 0 的怪兽死亡。
  • 没有死亡的怪兽向你移动一个单位。
  • 当一个怪兽来到你的位置,你就输了。

问你能不能赢。

1k2×1091ai109nx1<x2<x3<<xnn

题目分析

首先我们发现位于 x 的怪兽会在 |x| 秒到达 0 点,这启发我们可以用一个桶统计第 i 秒到达的怪兽的总血量。

接下来,我们考虑贪心,策略是先打先到的怪兽。有了思路,我们直接模拟即可。具体来说,就是维护剩余的子弹数量,每过一秒加上 k,如果剩余的子弹数量大于等于这一秒到来的怪兽的总血量,那么减去它即可,否则就是输了。

代码

#include<bits/stdc++.h>
using namespace std;
const int N=3e5+10;
long long t,n,k,pos[N],sum;
struct foreigner
{
	long long a,x;
}b[N];
void solve()
{
	sum=0;
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		cin>>b[i].a;
		pos[i]=0;
	}
	for(int i=1;i<=n;i++)
	{
		cin>>b[i].x;
		pos[abs(b[i].x)]+=b[i].a;
	}
	for(int i=1;i<=n;i++)
	{
		sum+=k;
		if(sum<pos[i])
		{
			printf("No\n");
			return;
		}
		else sum-=pos[i];
	}
	printf("Yes\n");
	return;
}
int main()
{
   ios::sync_with_stdio(false);
   cin.tie(0);
   cin>>t;
   while(t--)
   {
    	solve();
   }
   return 0;
}
posted @   zhuluoan  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示