題意:
有n頭牛,分別給他們擠奶的時間。
然後每頭牛擠奶的時候都要在乙個stall裡面,並且每個stall每次只能占用一頭牛。
問最少需要多少個stall,並輸出每頭牛所在的stall。
e.g 樣例:
input:
51 10
2 43 6
5 84 7
output:
412324
hint:
explanation of the sample:
here's a graphical schedule for this output:
time 1 2 3 4 5 6 7 8 9 10other outputs using the same number of stalls are possible.stall 1 c1>>>>>>>>>>>>>>>>>>>>>>>>>>>
stall 2 .. c2>>>>>> c4>>>>>>>>> .. ..
stall 3 .. .. c3>>>>>>>>> .. .. .. ..
stall 4 .. .. .. c5>>>>>>>>> .. .. ..
解析:先將這些時間按照起始時間從小到大排序,然後用優先佇列建立乙個終止時間從小到大的堆。
每次比較堆頂,即終止時間最小的時間,與當前點起始時間的大小。
若小,則將當前這只牛加入到豪華午餐中。。。加入到堆頂這只牛的stall中。
若大,則自己另起爐灶,建立stall。
**:
#include #include #include #include #include #include #include #include #include #include #include #include #define ll long long
#define lson lo, mi, rt << 1
#define rson mi + 1, hi, rt << 1 | 1
using namespace std;
const int maxn = 5e4 + 10;
const int inf = 0x3f3f3f3f;
const double eps = 1e-8;
const double pi = acos(-1.0);
const double ee = exp(1.0);
struct node
} cow[maxn];
int stall[maxn];
bool cmp(node a, node b)
int main()
sort(cow, cow + n, cmp);///按照起點排序
priority_queueq;///按照終點建堆
q.push(cow[0]);
int cnt = 1;
stall[cow[0].id] = 1;
for (int i = 1; i < n; i++)
else
}printf("%d\n", cnt);
for (int i = 0; i < n; i++)
}return 0;
}
poj3190區間類貪心 優先佇列
題意 每個奶牛產奶的時間為a到b,每個奶牛產奶時要占用一間房子,問n頭奶牛產奶共需要多少房子,並輸出每頭奶牛用哪間房子 分析 這題就是乙個裸的貪心,將奶牛按開始時間進行排序即可,但考慮一下資料範圍,我們可以用乙個優先佇列來進行維護,在優先佇列中我們按照奶牛的結束時間最小構造小頂堆,然後判斷新進來的元...
題解 poj3190 貪心 堆優化
題目鏈結 按照開始吃草的時間把牛排序。用乙個小根堆維護每個畜欄最後一頭牛結束吃草的時間,嘗試把當前的牛安排在堆頂 include include include using namespace std define rep i,a,b for int i a i b i const int n 5e...
poj3190 區間貪心 STL
題意 n頭任性的牛,每頭牛都要在自己的時間段裡擠奶,問最少用多少個擠奶槽並輸出每頭牛所在的擠奶槽的編號 從1開始 思路 目標明確,求最少用多少奶槽,並輸出如何分配,明顯區間貪心,找貪心的方向,就是對時間的最末端進行貪心。簡單來說,先把奶牛們的時間輸入並按開始時間進行排序,然後依次把有序的時間段都放入...