1、题目:

【题目描述】

A.D.1999,由坠落地球的“谜之战舰”带来的 Over Technology,揭示了人类历史和远 古文明之间的丝丝联系,促使人类终止彼此间的战争,一方面面对强大的异星人势力 ,用 “文 化的力量”寻找生存之道,一方面向着银河系进行移民而寻求新天地。西历 2067 年,银河 系边境行星的中心、失去自我而狂暴化的“Bajura”症候群扩大化。眼见事态严重,星间复合 企业体为控制症状,以少女们的“战术音乐组合 walküre”与共同作战的“Valkyrie 部队”一起集 结。

小风,作为战术音乐组合 walküre 的预备队中的一员,迎来了他的转正试炼!当试炼 开始(第 1 个单位时间)时,将会有大量的靶机同时飞起,每一架靶机都有各自的速度和 分数(可能相同),其中速度用飞离射击范围的时间来描述。然而,因为试炼用火炮比较老

旧,每个单位时间只能射击一发,并不是所有的靶机都能被击落,所以能得到的最高分也不

是所有靶机的分数总和。不过由于小风强!无敌!他弹无虚发,一炮一个,非常轻松的就拿 到了能得到的最高分,现在问题来了,这个最高分是多少呢?

PS:配合 BGM:いけないボーダーライン食用此题口感更佳

【输入格式】

第一行一个正整数 N,N 最大不超过 1000000

接下来 N 行,每行两个整数 T,V,第 i 行表示第 i-1 号靶将会在 T 时刻后飞出射击范 围,击落该靶机能够获得 V 的得分。保证 T 最大不超过 700000.

【输出格式】

输出一个正整数,保证答案在 INT 范围。

【样例输入】

7

1 6

1 7

3 2

3 1

2 4

2 5

6 1

【样例输出】

15

2、代码(测试点有三个TLE)

/*采用闭散列的方法*/
#include<stdio.h>
#include<malloc.h>
#include<algorithm>
using namespace std;
typedef struct hashtable *HashTable;
typedef struct hashtable
{
int size;
int *ht;
int *state;
} Hashtable;
struct Ti
{
int value;
int t;
} T[1000001]; //判断这个时间段位置是否已经被占,若被占,则往前寻找可以放的时间段,
//之后寻找的时间段只要超过原始时间就不可以了,因为此时炸弹已经飞出射击范围
int Unoccupied(int x,int y,HashTable H)
{
int i,k;
for(i=H->size-1; i>=0; i--)
{
k=(y+i)%H->size;
if(k>=y)
{
return k;
break;
}
if((k<y)&&H->state[k]==1)
{
return k;
break;
}
}
return H->size;
} //找到合适位置之后就将分数值放在该时间
void HtInsert(int x,int y,HashTable H)
{
int i;
i=Unoccupied(x,y,H);
if(i<y)//插入位置时间一定不能比原始时间大
{
if(i<H->size)
{
H->state[i]=0;
H->ht[i]=x;
}
}
} //按照分数值降序排序
bool cmp(Ti t1,Ti t2)
{
return t1.value>t2.value;
}
int main()
{
int n;
scanf("%d",&n);
int i,max=0;
for(i=0; i<n; i++)
{
scanf("%d%d",&T[i].t,&T[i].value);
if(max<T[i].t)
{
max=T[i].t;
}
}
HashTable H=(HashTable)malloc(sizeof*H);
H->size=max;
H->ht=(int*)malloc(H->size*sizeof(int));
H->state=(int*)malloc(H->size*sizeof(int));
for(i=0; i<H->size; i++)
{
H->state[i]=1;//1表示该位置还没有被占
H->ht[i]=0;
}
sort(T,T+n,cmp);
for(i=0; i<n; i++)
{
//将分数从大到小放入位置
HtInsert(T[i].value,T[i].t,H);
}
int ans=0;
for(i=0; i<max; i++)
{
ans+=H->ht[i];
}
printf("%d\n",ans);
return 0; }

3、代码(AC)

/*优先队列*/
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
priority_queue<int> q;
const int N=1000005;
struct Node
{
int t,v;
} a[N];
bool cmp(Node a,Node b)
{
if(a.t==b.t) return a.v<b.v;
return a.t<b.t;
}
int main()
{
int n,i,j,x,ans,sz;
scanf("%d",&n);
sz=q.size();
while(sz--) q.pop();
for(i=1; i<=n; ++i) scanf("%d%d",&a[i].t,&a[i].v);
sort(a+1,a+n+1,cmp);
ans=0;
for(i=a[n].t,j=n; i>=1; --i)
{
//对于每一个时间,将能在这个时间打的push进这个时间点的队列中,队首第一个就是这个时间点该打的
while(j>=1&&a[j].t>=i)
{
q.push(a[j--].v);
}
if(q.empty()) continue;
x=q.top();
q.pop();
ans+=x;
}
printf("%d\n",ans);
return 0;
}

ギリギリ eye (优先队列)的更多相关文章

  1. 数据结构作业——ギリギリ eye(贪心+优先队列/贪心+并查集)

    ギリギリ eye Description A.D.1999,由坠落地球的“谜之战舰”带来的 Over Technology,揭示了人类历史和远古文明之间的丝丝联系, 促使人类终止彼此间的战争,一方面面 ...

  2. HDU - 3345 War Chess 广搜+优先队列

    War chess is hh's favorite game: In this game, there is an N * M battle map, and every player has hi ...

  3. 堆排序与优先队列——算法导论(7)

    1. 预备知识 (1) 基本概念     如图,(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树.树中的每一个结点对应数组中的一个元素.除了最底层外,该树是完全充满的,而且从左向右填充.堆的数组 ...

  4. 数据结构:优先队列 基于list实现(python版)

    #!/usr/bin/env python # -*- coding:utf-8 -*- #Author: Minion-Xu #list实现优先队列 class ListPriQueueValueE ...

  5. python优先队列,队列和栈

    打印列表的疑问 class Node: def __str__(self): return "haha" print([Node(),Node()]) print(Node()) ...

  6. 数据结构作业——Sanji(优先队列)

    山治的婚约 Description 我们知道,山治原来是地下有名的杀人家族文斯莫克家族的三子,目前山治的弟弟已经出现,叫做四治,大哥二哥就叫汪(One)治跟突(Two)治好了(跟本剧情无关) .山治知 ...

  7. Java优先队列

    按照Java api的说法: java.util.PriorityQueue.PriorityQueue() Creates a PriorityQueue with the default init ...

  8. 优先队列实现Huffman编码

    首先把所有的字符加入到优先队列,然后每次弹出两个结点,用这两个结点作为左右孩子,构造一个子树,子树的跟结点的权值为左右孩子的权值的和,然后将子树插入到优先队列,重复这个步骤,直到优先队列中只有一个结点 ...

  9. “玲珑杯”ACM比赛 Round #7 B -- Capture(并查集+优先队列)

    题意:初始时有个首都1,有n个操作 +V表示有一个新的城市连接到了V号城市 -V表示V号城市断开了连接,同时V的子城市也会断开连接 每次输出在每次操作后到首都1距离最远的城市编号,多个距离相同输出编号 ...

随机推荐

  1. 牛客网程序员面试金典:1.1确定字符互异(java实现)

    问题描述: 请实现一个算法,确定一个字符串的所有字符是否全都不同.这里我们要求不允许使用额外的存储结构. 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同, ...

  2. Java Socket编程

    Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...

  3. PSP个人项目耗时记录

    估计这个任务需要多少时间: 计划 估计用时 估计这个任务需要多少时间 500min 开发 450min 需求分析 120min 生成设计文档 20min 设计复审 30miin 代码规范 10min ...

  4. (分享)FreeVideo1.6.1 VIP视频播放器(支持下载)

    软件名字:FreeVideo 版 本 号 :v 1.6.1 开发语言:易语言 压缩加壳:VMP 3.0 beta 皮      肤:易简约定制版(白色) 模块使用:乐易.精易.皮肤 主要技术:其实没啥 ...

  5. HTTP 2.0的那些事

    转自:http://www.admin10000.com/document/9310.html 在我们所处的互联网世界中,HTTP协议算得上是使用最广泛的网络协议.最近http2.0的诞生使得它再次互 ...

  6. 两种open()函数

    C语言中文件操作函数中,open()有两种形式: 一种形式是有两个参数open2: 另一种形式是有三个参数open3: 共有的参数有两个,第一个是"被打开文件的路径",第二个是&q ...

  7. 2o_TwoTips

    ∮Linux 使用的两个小技巧 开启启动脚本 和 环境变量问题 §1.开机启动脚本 && 周期任务 环境 CentOS7:3.10.0-327.el7.x86_64 # head /e ...

  8. LR常用函数以及调用自定义函数

    2.LR常用函数以及调用自定义函数 2.1.LR常用函数以及对信息的判断 2.1.1. LR内部自定义函数 在LR脚本中定义变量和编写自定义函数,需将变量的声明放在脚本其他内容的上方,否则会提示[il ...

  9. SRM 146 DIV2 1000

    Problem Statement      A well-known riddle goes like this: Four people are crossing an old bridge. T ...

  10. CSS实现DIV超长截断,并显示...

    DIV显示内容有时会超长,并把页面撑的很难看, 以前的做法是在JS中,或者后台判断其长度,过长就截断, 但由于中英文数字展示的宽度并不一样,截断的长度也就只能取最小值, 展示的效果也不好.利用CSS提 ...