1. 程式人生 > >B .Views Matter (CF 523 Div.2)

B .Views Matter (CF 523 Div.2)

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
*/