51nod 1380 夾克老爺的逢三抽一

2021-08-21 07:34:54 字數 755 閱讀 3209

題目

題解

設最大值為b,左邊為a,右邊為c

解釋一下為什麼要把a+c-b放回去

因為b不一定是最優的,說不定a、c和b差不多大,同時選a、c可能比b更優,把a+c-b放回去,若再次取出,則相當於用兩次選了a和c,滿足題意,也滿足貪心

#include

using

namespace

std;

typedef

long

long ll;

#define mp make_pair

const

int n=100002;

setint> >s;

int l[n],r[n],cnt,n,i,j;

ll ans,m[n],a,b,c;

void del(int x)

int main()

cnt=n/3;

for (i=0;isecond;

a=m[l[j]];b=m[j];c=m[r[j]];ans+=b;

del(l[j]);

del(r[j]);

s.erase(mp(m[j],j));

m[j]=a+c-b;

s.insert(mp(m[j],j));

}printf("%lld",ans);

}

51Nod 1380 夾克老爺的逢三抽一

acm模版 首先發一下官方題解吧 按照官方題解寫的 發現自己一直在第 21 組資料 tl e 很明顯,這組資料是後來加上去專門卡資料的。於是發現自己的 中忽略了乙個部分是暴力的思維,在查詢左右兩側可選的村民時,我用了兩個迴圈,這顯然是不行的,所以我需要使用鍊錶的思維,這樣查詢的複雜度就是 o 1 了...

51nod 1380 夾克老爺的逢三抽一

又到了諾德縣的百姓孝敬夾克大老爺的日子,帶著數量不等的銅板的村民準時聚集到了村口。夾克老爺是一位很 善良 的老爺,為了體現他的仁慈,有一套特別的收錢的技巧。1 讓所有的村民排成一隊,然後首尾相接排成乙個圈。2 選擇一位村民收下他的銅錢,然後放過他左右兩邊的村民。3 讓上述三位村民離開隊伍,並讓左右兩...

貪心 51Nod1380 夾克老爺的逢三抽一

這題需要一步轉化,就變成和 bzoj1150 ctsc2007 資料備份backup 一樣了。但不太能直接想到。為什麼題意就等價於選一些不相鄰的點呢?n個點的環,我們選中n 3個點,一定存在乙個選中的點兩側有連續兩個不選的的點,則我們把這個要選的點取掉,不會有兩個要選的點變成相鄰。剩下的就是貪心啦。...