概述
题目链接
反思一下自己的代码能力,比赛时打了140行的大模拟,还自信满满结果爆零了。标程足足少100行
#include<cstdio>
#include<algorithm>
using namespace std;
#define _rep(i,a,b) for(int i=(a);i<=(b);i++)
typedef long long ll;
const int N=1e5+10;
int n,m;
int h[N];
ll ans=0;
int main()
{
scanf("%d%d",&n,&m);
_rep(i,1,n)scanf("%d",&h[i]);
sort(h+1,h+n+1);
int pos=1,cnt=n,lazy=0,d=0;
h[n+1]=2e9;
for(;;)
{
if(m>0&&(cnt>2||h[pos]-lazy-d==1))//AOE
{
m--;lazy++;//魔法-1,群攻次数+1
if(h[pos]-lazy-d<=0)//打死一个
pos++,cnt--,d=0;
while(h[pos]-lazy<=0)//群攻打死的
pos++,cnt--;
}
else
{
if(m>0)//重击
d+=2,m--;
else
{
_rep(i,pos,n)
{
ans+=(ll)(h[i]-lazy-d)*cnt-1;cnt--;
d=0;
}
break;
}
if(h[pos]-lazy-d<=0)pos++,cnt--,d=0;
}
if(pos>n)break;
ans+=cnt;
}
printf("%lldn",ans);
return 0;
}
最后
以上就是内向丝袜为你收集整理的【题解】sdoj2594(2018-08-17集训T1)模拟的全部内容,希望文章能够帮你解决【题解】sdoj2594(2018-08-17集训T1)模拟所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复