首页 > 其他分享 >CF1901 D Yet Another Monster Fight 题解

CF1901 D Yet Another Monster Fight 题解

时间:2023-12-11 17:02:37浏览次数:39  
标签:ch Monster int 题解 ret Fight maxn 怪物 max

Link

CF1901 D Yet Another Monster Fight

Question

现在给你一堆怪物,你拥有法术(一个法术可以连续攻击这n个所有怪物),你可以选择任意一个怪物作为法术的第一个攻击目标(伤害为 \(x\) ),然后除了第一个攻击目标可以任意,其他攻击目标只能为曾经攻击目标的相邻怪物。然后伤害依次递减,\(x ,x-1,x-2,\cdots\) 如果伤害大于等于怪物的血量,则怪物被击杀

现在你第一次攻击目标一定是最优的,问你最坏情况下,\(x\) 需要多少才能一次法术把所有怪物击杀完毕

Solution

对于一个怪物 \(a[i]\) 考虑在 \(j\) 处释放,贪心的去向,最坏情况肯定是 \(j\) 先往后面衰减,然后往前面衰减,那么到 \(i\) 的衰减量就是 \((N-j)-(j-i)=N-i\) ,则 在 \(j\) 处释放至少需要 \(a[i]+(N-i)\)

image.png

如果在 \(i\) 前面释放,则需要的 \(x\) 至少 \(a[i]+i-1\)

那么对于需要在 \(j\) 处开始攻击, 则 $$x=\max{\max_{i=1}{j-1}{a[i]+i-1},\max_{i=j+1}N {a[i]+N-i},a[i]}$$
对于 \(\max_{i=1}^{j-1}{a[i]+i-1}\) 和 \(\max_{i=j+1}^N {a[i]+N-i}\) 可以提前预处理出来

Code

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=3e5+5,INF=2e9;
int a[maxn],R[maxn],L[maxn];
inline int read(){
    int ret=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-f;ch=getchar();}
    while(ch<='9'&&ch>='0')ret=ret*10+ch-'0',ch=getchar();
    return ret*f;
}
int main(){
    // freopen("D.in","r",stdin);
    int N=read();
    for(int i=1;i<=N;i++) a[i]=read();
    for(int i=1;i<=N;i++){
        int now=N-i+a[i];
        L[i]=max(L[i-1],now);
    }
    for(int i=N;i;i--){
        int now=i-1+a[i];
        R[i]=max(R[i+1],now);
    }
    int ans=INF;
    for(int i=1;i<=N;i++){
        int now=max(a[i],max(L[i-1],R[i+1]));
        ans=min(ans,now);
    }
    printf("%d\n",ans);
    return 0;
}

标签:ch,Monster,int,题解,ret,Fight,maxn,怪物,max
From: https://www.cnblogs.com/martian148/p/17894812.html

相关文章

  • CF1764H Doremy's Paint 2 题解
    题目链接先断环成链,由于对于多组询问不好一起处理,我们先考虑单组询问的处理方式。一个很暴力的想法是每次模拟题目要求的操作并且最后数颜色,我们这是在通过下标进行操作最后再数颜色,而很多对于下标的操作都是不必要的,考虑直接枚举颜色进行判定。对于每种颜色,它对于最后答案有贡......
  • D. Yet Another Monster Fight
    原题链接1.导论这道题能不能用贪心做?答案是不能,具体为什么已经有题解给出回答。当贪心无法求解时,我们考虑一下动态规划。2.算法设计对于任一节点,其最坏情况(即所需最大起始威力值,后文称最大值)是什么?当第一个被攻击的怪物(以下称头怪物)在其右边时,其最大值为右边怪物的数量加上自......
  • UVA1658 Admiral 题解
    LinkUVA1658AdmiralQuestion给出一个图,找出\(1\simn\)的两条,使得路径和最小Solution可以把点拆开,把除了\(1\)和\(n\)的点\(i\),拆成\(i\)和\(i'\),\(i\)到\(i'\)连一条费用为\(0\),容量为\(1\)的边,如果原来有一条边\(u-v\),那么就建立一条\(u'->v\),费......
  • P2341 受欢迎的牛 G 题解
    LinkP2341[USACO03FALL/HAOI2006]受欢迎的牛GQuestion牛栏中有\(N\)头奶牛,和一些\(M\)对爱慕关系,A->B表示A爱慕B。每个奶牛都喜欢自己,被所有奶牛喜欢就是一头明星奶牛,求明星奶牛的数量Solution考虑一个强连通分量里面的奶牛是相互爱慕的,先根据强连通分量缩点,缩......
  • 题解 QOJ1173【Knowledge Is...】 / accoders::NOI 5681【interval】
    https://qoj.ac/contest/537/problem/1173problem给定\(n\leq10^6\)个区间,你需要求出能够最多选出多少对区间,使得两个区间不交(区间为闭区间)。要求一个区间最多属于一对选出的区间。solution这是一般图匹配问题的特殊情况,所以放弃dp,考虑贪心、网络流、匹配等。按照左端点......
  • P5048 [Ynoi2019 模拟赛] 题解
    题意给定\(n\)个数,有\(m\)个询问,每个询问给定\(l\)和\(r\),求出区间\(l\)到\(r\)中的最小众数出现次数,强制在线。数据范围:\(n\le500000\),空间限制:\(62.5MB\)。思路这道题的弱化版是蒲公英,这道题加强的地方在于数据范围。正常的分块求区间众数的空间复杂度是\(O(n......
  • CF1842E Tenzing and Triangle 题解
    题意不多赘述。思路如果两个所选的三角形有重合部分的话,那么这种情况肯定是不会出现的。因为如果把这两个三角形合成一个大三角形的话,不仅覆盖面积会增大,而且花费的代价还不会多。于是我们可以想到用dp来解决,设\(dp_{i}\)表示删完横坐标为\(0\)到\(i\)中的点的最小代价......
  • [ABC304Ex] Constrained Topological Sort 题解
    题意给定一张有向图\(G\),有\(n\)个点和\(m\)条边,问是否存在一种拓扑序的排列\(P\)使得\(l_{i}\lep_{i}\ler_{i}\)。思路首先对于一条边\(u\tov\),如果限制满足\(r_{v}\ler_{u}\)或者\(l_{v}\gel_{u}\)的话,那么这个限制其实是不完全正确的。因为最终的序列......
  • 【题解】AtCoder abc322_f Random Update Query
    传送门:https://atcoder.jp/contests/abc332/tasks/abc332_f容易发现,对于一个位置$i$,$A_i$的最终值是由对$i$的最后一次赋值操作决定的;因此,将所有操作按时间顺序倒过来考虑,则由第$j$次操作决定$A_i$最终值的概率为"在第$(j+1)$~$m$次操作中没有修改过$i$的概率"与"第......
  • 【题解】AtCoder abc332_g Not Too Many Balls
    传送门:https://atcoder.jp/contests/abc332/tasks/abc332_g看完题,第一眼反应为最大流。建模方式为:以颜色为左部点,盒子为右部点,源点$S$向颜色$i$连一条容量为$A_i$的边,盒子$j$向汇点$T$连一条容量为$B_j$的边,颜色$i$向盒子$j$连一条容量为$ij$的边;在这张图......