Codeforces Round #523 (Div. 2)B. Views Matter(思維+貪心)
阿新 • • 發佈:2018-12-02
題意:有一堆塊,第i塊的高度是ai,有一個從上面看到的俯檢視,有一個從右面看到的側檢視,現在問從原來的堆中至多取出多少個塊保持俯檢視和側檢視不變,有兩個規定是這樣的,第一個就是物塊不受重力影響,就是說從下面掏出塊上面的不會掉落的意思,第二個是不能用手移動塊。
思路:全部累加 減去 n 個底部的 1(俯檢視),減去最高的 a[n](側檢視),再一個一個從俯視圖裡能否貢獻一個高度到側檢視上
#include<cstdio> #include<algorithm> using namespace std; long long n,m,a[100010],ans,now=1; int main() { scanf("%I64d%I64d",&n,&m); for(int i=1;i<=n;i++) scanf("%I64d",&a[i]); sort(a+1,a+n+1); for(int i=1;i<=n;i++) { ans+=a[i]; } for(int i=2;i<=n;i++) { if(a[i]>now)now++;//貢獻到側檢視 } ans-=(n+(a[n]-now)); printf("%I64d",ans); return 0; }