60pts求调
查看原帖
60pts求调
848964
hzoi_Shadow楼主2023/7/15 20:50
#include<bits/stdc++.h>
using namespace std;
#define ll long long 
#define sort stable_sort 
#define endl '\n'
ll a[2000001],c[2000001];
int main()
{
    ll n,k,k2,i,j,maxx=0,id,minn=0x7f7f7f7f,ans=0,sum=0,num=0,flag=0;
    cin>>n>>k;
    for(i=1;i<=n;i++)
    {
        cin>>a[i];
        if(c[a[i]]==0)
        {
            num++;
        }
        c[a[i]]++;
        maxx=max(maxx,a[i]);
        minn=min(minn,a[i]);
    }
    sort(c+minn,c+maxx+1);
    for(i=minn;i<=maxx-1;i++)
    {
        if(c[i]!=c[i+1])
        {
            sum=1;
            break;
        }
    }
      for(i=maxx;i>=minn;i--)
    {
        k2=k;
        id=maxx;
        if(sum==0&&(k==0||(maxx==minn&&k<(n+1)/2)))
        {
            ans=num;
            flag=1;
            break;
        }
        if(sum==1)
        {
            if(k<c[maxx])
            {
                if(k<=c[maxx-1]&&k<c[maxx]-k)
                {
                    if(c[i]+k>=max(c[maxx]-k,c[maxx-1]))
                    {
                        ans++;
                        flag=1;
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    //if(k<c[maxx]-k)
                    //{
//
                    //}
                }
            }
            /*
            for(j=maxx;j>=minn;j--)
            {
                if(k2>=c[j])
                {
                    k2-=c[j];
                    id=j;
                }
                else
                {
                    break;
                }
            }
            if(c[i]+k>=c[id]-k2)
            {
                ans++;
                flag=1;
            }
            */
            else
            {
                break;
            }

            
        }
    }
    if(flag==0)
    {
        cout<<"pigstd";
    }
    else
    {
        cout<<ans;
    }
    return 0;
}
2023/7/15 20:50
加载中...