首页 > 其他分享 >CF1923B Monsters Attack! 题解

CF1923B Monsters Attack! 题解

时间:2024-04-13 19:47:01浏览次数:18  
标签:怪兽 le CF1923B int 题解 血量 long pos Attack

题目简述

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

在每秒钟会发生:

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

问你能不能赢。

$1 \le k \le 2 \times 10^9$,$1 \le a_i \le 10^9$,$-n \le x_1 < x_2 < x_3 < \cdots < x_n \le n$。

题目分析

首先我们发现位于 $x$ 的怪兽会在 $\lvert x \rvert$ 秒到达 $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;
}

标签:怪兽,le,CF1923B,int,题解,血量,long,pos,Attack
From: https://www.cnblogs.com/zhuluoan/p/18133263

相关文章

  • CF1165E Two Arrays and Sum of Functions 题解
    题目简述已知两个长度均为$n$的数组$a$和$b$。给定一个函数:$f(l,r)=\sum\limits_{l\lei\ler}a_i\cdotb_i$。你的任务是对数组$b$中的元素以任意的顺序重新排序,使$\sum\limits_{1\lel\ler\len}f(l,r)$的值最小。题目分析我们首先进行化简,发现题......
  • CF107A Dorm Water Supply 题解
    题目简述给出一个$n$个点,$m$条边的有向图,边带权。保证每个点的出度和入度最多为$1$。对于每一个入度为$0$,出度为$1$的点,我们在该点建一个水箱。对于每一个入度为$1$,出度为$0$的点,我们在该点建一个水龙头。可以发现,每一个水箱对应一个唯一的水龙头,我们将每对对应......
  • CF1942B Bessie and MEX 题解
    题目简述给定一个长度为$n$的数组$a$,让你构造一个等长的排列$p$,其中从$0$到$n-1$的每个整数恰好出现一次。满足对于每一个位置$a_i=\texttt{MEX}(p_1,p_2,\ldots,p_i)-p_i$,其中数组的$\texttt{MEX}$是不在该数组中出现的最小非负整数。题目分析我们发现正着做并......
  • CF244B Undoubtedly Lucky Numbers 题解
    题目简述给定一个$n$,问有多少个小于等于$n$的数只由两个不同的数字$x$和$y$组成。题目分析直接枚举肯定不行,我们考虑枚举$x$和$y$,再利用深搜,生成所有不大于$n$且只由$x$和$y$组成的数字,利用map去重,统计答案即可。代码#include<iostream>#include<map>usi......
  • 2023CCPC题解
    2023年第五届河南省CCPC大学生程序设计竞赛ProblemA.小水獭游河南#include<bits/stdc++.h>usingnamespacestd;intmain(){intt;cin>>t;while(t--){stringa;cin>>a;intst[27],ji=0;memset(st,0,sizeof(......
  • CF1946B Maximum Sum 题解
    题目简述你有一个由$n$个整数组成的数组$a$。你要对它进行$k$次操作。在一次操作中,你选择了数组$a$的任意连续子数组(可能为空),并在数组的任意位置插入了该子数组的和。你的任务是找出经过$k$次操作后数组的最大和。题目分析这道题显然是一道贪心题。对于第$1$次操......
  • 集合计数——题解
    题目这篇题解的背景。。。(可以跳过,与题目无关)说实话,有点恼,也觉得自己有点唐,在以为自己已经理解了变量意义的情况下(实际上并没有)去推了半天错式子,甚至我推出了他不对时还给自己否定了,昨天晚三还拉着\(9G\)与我一块推。。。,结果上午发觉好像意义理解错了。。。抽象,就当是一种......
  • CF416E 题解
    前置知识:floyd题意给定一个\(n\)个点\(m\)条边的无向简单图,对于每对\((s,t),1\les<t\len\),求出有多少条边被至少一个\(s\tot\)的路径经过。\(n\le500,m\le\frac{n(n-1)}{2}\)题解首先一个很一眼的做法先floyd一遍求出\(dis(i,j)\),接着枚举\((s,......
  • 52 Things: Number 43: Describe some basic (maybe ineffective) defences against s
    52Things:Number43:Describesomebasic(maybeineffective)defencesagainstsidechannelattacksproposedintheliteratureforAES52件事:第43件:描述AES文献中提出的针对侧信道攻击的一些基本(可能无效)防御措施 Thisisthelatestinaseriesofblogpoststoa......
  • 52 Things: Number 44: Describe some basic (maybe ineffective) defences against s
    52Things:Number44:Describesomebasic(maybeineffective)defencesagainstsidechannelattacksproposedintheliteratureforECC.52件事:第44件:描述文献中为ECC提出的一些针对侧信道攻击的基本(可能无效)防御措施。 Thisisthelatestinaseriesofblogposts......