【JZOJ 4821】 打膈膜

来源:互联网 发布:德国布线火遍网络 编辑:程序博客网 时间:2024/05/16 19:27

Description

这里写图片描述
这里写图片描述

Analysis

这是一道结论题,但是我并不会证明这个结论。
首先显然开始就用完所有魔法值最优,放重击肯定先放血少的。
结论:能放群攻就放,如果只有两只怪且其血量大于1,则重击血少的,否则还是群攻。
放完魔法就简单了,每次打血最少的就没了。

Code

#include<cstdio>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)using namespace std;typedef long long ll;const int N=100010;ll a[N];int main(){    freopen("game.in","r",stdin);    freopen("game.out","w",stdout);    int n,m;    ll ans=0;    scanf("%d %d",&n,&m);    fo(i,1,n) scanf("%lld",&a[i]);    sort(a+1,a+n+1);    a[n+1]=2147483647;    int l=1;    fo(i,1,m)    {        if(l>n) break;        if(n-l+1<=2)        {            if(a[l]==1)                fo(j,l,n) a[j]--;            else a[l]-=2;            while(!a[l]) l++;            fo(j,l,n) ans++;        }        else        {            fo(j,l,n) if(--a[j]) ans++;            while(!a[l]) l++;        }    }    a[l]--;    fo(i,l,n) ans+=(n-i+1)*a[i];    printf("%lld",ans);    return 0;}
0 0
原创粉丝点击