B .Views Matter (CF 523 Div.2)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37868325/article/details/84367786

https://mp.csdn.net/postedit/84366147

,自己画画图,排个序,(m就相当于a[n]了)每一行每一列至少有一个,所以先把每一行的都放一个,ans=n,然后遍历列,k是从低的行遍历到高的行,如果当前列能达到k高度,直接将原初放的那块,移到当前高度位置,不然,随便放就可以,自己画图想想,不难,

代码:

#include<bits/stdc++.h>
using namespace std;
long long n,m,a[100005],ans,s;
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        s+=a[i];
    }
    sort(a+1,a+n+1);
    int k=1;
    ans=n;
    for(int i=1;i<=n;i++)
    {
        if(a[i]>=k)
        {
            k++;if(k>a[n]) break;
        }

    }
    ans+=a[n]-k+1;
    cout<<s-ans<<endl;
    return 0;
}
/*
4 4
2 1 3 1
*/

猜你喜欢

转载自blog.csdn.net/qq_37868325/article/details/84367786
今日推荐