優先佇列 HDOJ5360 Hiking

2022-07-22 06:27:11 字數 1301 閱讀 3901

題意:有n個人,每個人有兩個引數$l$和$r$

邀請他們去hiking, 當  當前已經邀請到的人數大於等於$l$,並且小於等於$r$,那麼這個人就會去

問最多能邀請到幾個人

並輸出 依次要邀請的人的編號(編號1~n)

先要按$l$排序($l$小的在前),因為所有$l$小於等於當前已經邀請到的人數的人才能被邀請

對上述能被邀請的人 要在對$r$排序($r$小的在前), 優先邀請$r$小的

用優先佇列搞一下就好了

1 #include 2

using

namespace

std;

3 typedef long

long

ll;4

const ll mod=1000000007;5

6struct

node

714 } a[100005

];15

16bool

cmp(node a, node b)

1720

21int ans[100005

];22

bool vis[100005

];23 priority_queueq;

24int

main()

2538

for(int i=1; i<=n; i++)

39 scanf("

%d", &a[i].r);

40 sort(a+1, a+1+n, cmp);

41while(!q.empty()) q.pop();

42int cur=1, num=0

;43 memset(ans, 0, sizeof

(ans));

44 memset(vis, 0, sizeof

(vis));

45for(int i=0; i)

4656 printf("

%d\n

", num);

57for(int i=1; i<=n; i++)

58if(!vis[i])

59 ans[++num]=i;

60for(int i=1; i<=n; i++)

61 printf("

%d%c

", ans[i], (i==n? '

\n': '

'));62}

63return0;

64 }

hdoj 5360

HDU 5360 Hiking 優先佇列

題意 beta想要請n個soda去遠足,邀請第i個soda時要符合乙個條件 當前人數不少於li並且不大於ri 如果滿足就同意,即使後來的人數會不符合現在提出的條件 問最多可以邀請多少個soda,輸出數目和邀請順序 若有多種方法輸出任乙個即可 思路 將soda按照l的值從小到大排列 如果soda 0則...

hdu 5360 Hiking 優先佇列 貪心

題目 題意 beta有n個朋友,beta要邀請他的朋友go hiking,已知每個朋友的理想人數 l,r 現有l r個人準備去,那麼這個朋友就去 求最多有多少人去。及beta邀請朋友的順序。分析 每次邀請人的最優解就是 選會去的人裡面r最小的那個人。實現的話,cur代表已經準備go hiking的人...

HDU 5360 Hiking (貪心 優先佇列)

演算法,思路來自 這篇部落格的 有小錯誤 定義結構體 陣列 左端,右端,原來的位置 答案所求 對於每個樣例 清空佇列 清空放答案的陣列 讀入左端,讀入右端,對結構體陣列按照左端較小在前進行排序 用cnt,和答案陣列,存已經邀請的人 用i存當前掃到的結構體位置 迴圈 佇列不為空時,詢問當前佇列裡,右端...