Description
Input
Output
Sample Input
样例输入1:
2 1
2 1
样例输入2:
3 4
2 4 4
Sample Output
样例输出1:
1
样例输出2:
6
Solution
这题有一个只可意会的贪心
将血量从小到大排序
如果大于两个人或者当前这个人的血量为1,则群体攻击
否则暴击
如果没有魔法值了就普通攻击
证明:我不会
Code
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define N 101000
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define ll long long
using namespace std;
int a[N],n,m;
ll ans=0;
int main()
{
freopen("game.in","r",stdin);freopen("game.out","w",stdout);
scanf("%d%d",&n,&m);fo(i,1,n) scanf("%d",&a[i]);
sort(a+1,a+n+1);
int k=0;
fo(i,1,n)
{
if(a[i]-k<=0) ans--;
while(a[i]-k>0)
{
if(m>0)
{
if(n-i+1>2||a[i]-k==1) k++,m--;
else a[i]-=2,m--;
}
else ans+=(ll)(a[i]-k-1)*(n-i+1),a[i]=0;
ans+=(ll)(n-i);
if(a[i]-k>0) ans++;
}
}
printf("%lld",ans);
fclose(stdin);fclose(stdout);
}