您的位置:首页 > 其它

【HDOJ】4544 湫湫系列故事——消灭兔子

2014-12-24 15:57 218 查看
贪心,普通贪心两层循环TLE了,然后用优先级队列维护内层。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <algorithm>
using namespace std;

#define MAXN 100005

typedef struct arrow_t {
int p, d;
bool operator < (const arrow_t &x) const {
return p > x.p;
}
} arrow_t;

int B[MAXN];
arrow_t arrows[MAXN];
int n, m;

bool comp(arrow_t a, arrow_t b) {
return a.d < b.d;
}

int main() {
int i, j, k;
__int64 ans;
arrow_t arr;
bool flag;

#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
#endif

while (scanf("%d %d", &n, &m) != EOF) {
for (i=0; i<n; ++i)
scanf("%d", &B[i]);
for (i=0; i<m; ++i)
scanf("%d", &arrows[i].d);
for (i=0; i<m; ++i)
scanf("%d", &arrows[i].p);

sort(B, B+n);
sort(arrows, arrows+m, comp);
ans = 0;
priority_queue<arrow_t> Q;
k = m-1;
flag = true;
for (i=n-1; i>=0; --i) {
while (k>=0 && arrows[k].d>=B[i]) {
Q.push(arrows[k]);
--k;
}
if (Q.empty()) {
flag = false;
break;
}
arr = Q.top();
Q.pop();
ans += arr.p;
}

if (flag) {
printf("%I64d\n", ans);
} else {
printf("No\n");
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: