55pts,求hack
查看原帖
55pts,求hack
877691
MorLeaves楼主2024/3/30 10:15
#include<iostream>
#include<cstdio>
#include<algorithm>
typedef long long ll;
using namespace std;
ll n,m,a[114514],p=0,ans=0,v[114514];
bool bo=false;
int main()
{
	scanf("%lld %lld",&n,&m);
	for(ll i=1;i<=n;i++)
	{
		scanf("%lld",&a[i]);
	}
	sort(a+1,a+n+1);
	for(ll i=1;i<=n;i++)
	{
		if (a[i]-p<=0)
		{
			continue;
		}
		ll k=n-i+1;
		if (k>=3&&m>=1)
		{
			ll w=min(m,a[i]-p);
//			printf("i=%lld:放了%lld次AOE,",i,w);
			ans+=w*k;
			p+=w;
//			printf("AOE对每个目标造成%lld伤害,",p);
			m-=w;
//			printf("剩余能量值为%lld,",m);
			ll cnt=0;
			while(a[i]-p<=0&&i<=n)
			{
				i++;
				cnt++;
			}
			if (cnt>=1)
			{
				ans-=cnt;
				i--;
			}
//			printf("共扣了%lld滴血\n\n",ans);
		}
		if (k<=2&&m>=1)
		{
			ll hp=a[i]-p,ypy=hp%2;
			ll w=min(m,(hp-ypy)/2);
			ans+=w*k-1+ypy;
//			printf("i=%lld:放了%lld次暴击,",i,w);
			m-=w;
			v[i]+=2*w;
//			printf("剩余%lld能量值\n",m);
			if (ypy&&m>=1)
			{
				m--;
				p++;
//				printf("i=%lld:再放了1次AOE,对所有野怪共造成了%lld点伤害\n",i,p);
				ans+=k;
				ll cnt=0;
				while(a[i]-v[i]-p<=0&&i<=n)
				{
					i++;
					cnt++;
				}
				if (cnt>=1)
				{
					ans-=cnt;
					i--;
				}
			}
//			printf("共扣了%lld滴血\n\n",ans);
		}
		if (m==0)
		{
			if (bo==false)
			{
				bo=true;
				for(ll j=i;j<=n;j++)
				{
					a[j]=a[j]-p-v[j];
				}
			}
			if (a[i]>=1)
			{
				ans+=a[i]*k-1;
			}
		}
	}
	printf("%lld",ans);
	return 0;
}
2024/3/30 10:15
加载中...