现在的位置: 首页 > 综合 > 正文

HDU4544 湫湫系列故事――消灭兔子

2018年12月19日 ⁄ 综合 ⁄ 共 823字 ⁄ 字号 评论关闭

HDU 4544


Tags: 数据结构,贪心

Analysis:

将兔子的血量从大到小排序,将箭的杀伤力从大到小排序,对于每一个兔子血量,

将比他大的杀伤力大的剑压入优先队列,优先队列自己重写,让它每次抛出的数为价钱最小。

Code:

#include <cstdio>
#include <queue>
#include <algorithm>
#include <functional>
using namespace std;
typedef long long LL;
const int maxn = 100010;
struct tt {
     int d;
     int p;
     bool operator <(const tt& t) const {
          return d>t.d||(d==t.d&&p<t.p);
     }
} pt[maxn];
int b[maxn];
priority_queue<int , vector<int>, greater<int> > q;
int main()
{
     int n, m, i, j;
     while(~scanf("%d%d",&n,&m)) {
          for(i=1; i<=n; i++) scanf("%d",&b[i]);
          for(i=1; i<=m; i++) scanf("%d",&pt[i].d);
          for(i=1; i<=m; i++) scanf("%d",&pt[i].p);
          sort(b+1,b+1+n,greater<int>());
          sort(pt+1,pt+1+m);
          while(!q.empty()) q.pop();
          LL ans = 0;
          bool flag = 1;
          for(i=1,j=1; i<=n; i++) {
               while(j<=m&&pt[j].d>=b[i]) {
                    q.push(pt[j].p);
                    j++;
               }
               if(!q.empty()) {
                    ans += q.top();
                    q.pop();
               } else {
                    flag = 0;
                    break;
               }
          }
          if(flag) printf("%I64d\n",ans);
          else printf("No\n");
     }
     return 0;
}

抱歉!评论已关闭.