其他的都对了,求大佬帮助
#include<bits/stdc++.h>
using namespace std;
inline int read(void)
{
int x=0,y=1;
char c=getchar();
while(c>'9'||c<'0')
{
if(c=='-')
y=-1;
c=getchar();
}
while(c<='9'&&c>='0')
{
x=x*10+c-'0';
c=getchar();
}
return x*y;
}
const int To=3e4,N=5e6+5;
int t[To+5],n,a[N],m,nn;
int ansa,ansb,x;
int cnt[999];
inline int p(int a,int b)
{
if(!(a%b))return a/b;
return (a/b)+1;
}
signed main()
{
n=read(),m=read();
for(int i=1;i<=n;i++)
x=read(),t[x]++;
for(int i=1;i<=To;i++)
for(int j=1;j<=t[i];j++)
a[++nn]=i;
if(m<=0)
{
printf("0 0\n");
return 0;
}
int pp=0;
bool fk=false;
for(int i=1;i<=n;i++)
{if(!a[i])continue;
a[i]-=pp;
if(a[i]>3)
{
if(fk)break;
ansa+=a[i]/3;
pp=ansa*3;
a[i]%=3;
}
cnt[a[i]]++;
if((cnt[1])+(cnt[2]*2)+((cnt[0]+cnt[3])*3)>=m)
fk=true;
}
if((cnt[1])+(cnt[2]*2)+((cnt[0]+cnt[3])*3)<m)
{
printf("Human Cannot Win Dog\n");
return 0;
}
cnt[3]+=cnt[0];
// printf("%d %d %d\n",cnt[1],cnt[2],cnt[3]);
if(cnt[2]*2<m)
{
m-=cnt[2]*2;
ansb+=cnt[2];
if(cnt[1]<m)
{
ansb+=cnt[1];
m-=cnt[1];
ansb+=p(m,3)*4;
m-=p(m,3)*3;
if(m<0)
{
ansb-=min(abs(m),cnt[1]);
}
}
else
{
ansb+=m;
}
}
else
{
ansb+=p(m,2);
}
printf("%d %d\n",ansa,ansb+ansa);
}