首页 > 代码库 > 【HDOJ】4544 湫湫系列故事——消灭兔子
【HDOJ】4544 湫湫系列故事——消灭兔子
贪心,普通贪心两层循环TLE了,然后用优先级队列维护内层。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <queue> 6 #include <algorithm> 7 using namespace std; 8 9 #define MAXN 10000510 11 typedef struct arrow_t {12 int p, d;13 bool operator < (const arrow_t &x) const {14 return p > x.p;15 }16 } arrow_t;17 18 int B[MAXN];19 arrow_t arrows[MAXN];20 int n, m;21 22 bool comp(arrow_t a, arrow_t b) {23 return a.d < b.d;24 }25 26 int main() {27 int i, j, k;28 __int64 ans;29 arrow_t arr;30 bool flag;31 32 #ifndef ONLINE_JUDGE33 freopen("data.in", "r", stdin);34 #endif35 36 while (scanf("%d %d", &n, &m) != EOF) {37 for (i=0; i<n; ++i)38 scanf("%d", &B[i]);39 for (i=0; i<m; ++i)40 scanf("%d", &arrows[i].d);41 for (i=0; i<m; ++i)42 scanf("%d", &arrows[i].p);43 44 sort(B, B+n);45 sort(arrows, arrows+m, comp);46 ans = 0;47 priority_queue<arrow_t> Q;48 k = m-1;49 flag = true;50 for (i=n-1; i>=0; --i) {51 while (k>=0 && arrows[k].d>=B[i]) {52 Q.push(arrows[k]);53 --k;54 }55 if (Q.empty()) {56 flag = false;57 break;58 }59 arr = Q.top();60 Q.pop();61 ans += arr.p;62 }63 64 if (flag) {65 printf("%I64d\n", ans);66 } else {67 printf("No\n");68 }69 }70 71 return 0;72 }
【HDOJ】4544 湫湫系列故事——消灭兔子
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。