ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CF1380D.Berserk And Fireball(思维)

2020-07-18 17:00:48  阅读:294  来源: 互联网

标签:法力 CF1380D int len maxn lld% ans Fireball Berserk


/*
 *CF1380D.Berserk And Fireball
 *n个战士站成一排,分别有武力值ai。
 *你有两种法术:火球和激怒。
 *火球可以消耗x个法力,消灭连续k个战士。
 *激怒可以消耗y个法力,选择相邻的两个战士,武力值大的会消灭武力值小的
 *求最后留下的战士和数组b一样所需要的最小法力花费
 *题解:
 *划分为多个区间
 *如果当前区间的长度len<k
 *区间最大值大于左右端点,则无解,因为无法消去最大值
 *区间最大值小于左右端点,消费就是len*y
 *如果当前区间的长度len>=k
 *区间最大值大于左右端点,那必须花费一个x来把最大值消掉。
 */
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+100;
typedef long long ll;
int a[maxn];
int b[maxn];
ll n,m,x,k,y;
int main () {
    scanf("%lld%lld%lld%lld%lld",&n,&m,&x,&k,&y);
    for (int i=1;i<=n;i++) scanf("%d",&a[i]);
    for (int i=1;i<=m;i++) scanf("%d",&b[i]);
    a[n+1]=b[m+1]=-1;
    ll ans=0;
    for (int i=1,j=0;i<=m+1;i++) {
        int l=j+1,r=j+1,len=0,Max=-1;
        while (r<=n+1&&a[r]!=b[i]) Max=max(Max,a[r]),r++;
        if (r>n+1) {
            ans=-1;break;
        }
        len=r-l;
        if (len<k) {
            if (Max>max(a[l-1],a[r])) {
                ans=-1;break;
            }
            else {
                ans+=y*len;
            }
        }
        else {
            if (Max>max(a[l-1],a[r])) {
                ans+=x;
                len-=k;
                if (x<k*y) 
                    ans+=(len/k)*x+(len%k)*y;
                else
                    ans+=y*len;
            }
            else {
                if (x<k*y)
                    ans+=(len/k)*x+(len%k)*y;
                else
                    ans+=y*len;
            }
        }
        if (a[r]!=b[i])
            j=r+1;
        else
            j=r;
    }
    printf("%lld\n",ans);
}

 

标签:法力,CF1380D,int,len,maxn,lld%,ans,Fireball,Berserk
来源: https://www.cnblogs.com/zhanglichen/p/13336366.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有