cdoj 1334 郭大侠与Rabi-Ribi 贪心+数据结构
郭大侠与Rabi-Ribi
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)

最近郭大侠迷上了玩Rabi-Ribi这个游戏。
Rabi-Ribi呢,是一个打兔子的动作冒险游戏,萌萌哒的兔子在地上跑来跑去,好萌好萌呀~
这个游戏是这样玩的,郭大侠作为一个主角,拿着一个小锤子,他的目标是敲晕兔子,然后最后把这些敲晕的兔子都带回家。
当然咯,郭大侠想带回的兔子的总价值最高~
但是,兔子实在是太多了,郭大侠的锤子每一秒钟只能敲晕一只兔子,而且每一只兔子只会在地面上逗留a[i]a[i]秒,在a[i]a[i]秒之后,这一只兔子就会跑回自己的小窝里面。
所以郭大侠面临一些抉择,希望你能帮助他。
Input
第一行包含一个整数NN表示有NN个兔子在地上跑来跑去。
第二行NN个用空格分隔的整数a[i]a[i]表示第i只兔子冒出后停留的时间
第三行NN个用空格分隔的整数v[i]v[i]表示第i只兔子的价值。
1≤N≤1000001≤N≤100000
1≤a[i]≤50001≤a[i]≤5000
1≤v[i]≤10001≤v[i]≤1000
Output
输出郭大侠最多能获得的价值是多少
Sample input and output
| Sample Input | Sample Output |
|---|---|
5 |
24 |
3 |
3 |
Hint
死宅真可怕,连可爱的兔子都要敲晕带回家 QAQ
思路:这题的数据水;在某个时间点,放入能放的最大值;倒着写;
下面是三种不一样的解法;
暴力:纯暴力,因为数据水所以过了;
#include<bits/stdc++.h>
using namespace std;
#define ll __int64
#define inf 0xfffffff
struct is
{
int w,v;
}a[];
int cmp(is x,is y)
{
if(x.v!=y.v)
return x.v>y.v;
return x.w>y.w;
}
int flag[];
int check(int x)
{
for(int i=x;i>;i--)
if(!flag[i])
return i;
return -;
}
int main()
{
int x,y,z,i,t;
while(~scanf("%d",&x))
{
memset(flag,,sizeof(flag));
for(i=;i<x;i++)
scanf("%d",&a[i].w);
for(i=;i<x;i++)
scanf("%d",&a[i].v);
sort(a,a+x,cmp);
int kui=;
for(i=;i<x;i++)
{
int gg=check(a[i].w);
if(gg!=-)
{
flag[gg]=;
kui+=a[i].v;
}
}
printf("%d\n",kui);
}
return ;
}
线段树:线段树维护+二分查找
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
#define esp 0.00000000001
const int N=2e5+,M=1e6+,inf=1e9;
struct is
{
int x,y;
}a[N];
int ans[N];
int cmp(is x,is y)
{
if(x.y!=y.y)
return x.y>y.y;
return x.x>y.x;
}
int minn[N];
void update(int p,int c,int l,int r,int pos)
{
if(p==l&&p==r)
{
minn[pos]=c;
return;
}
int mid=(l+r)>>;
if(p<=mid)
update(p,c,l,mid,pos<<);
if(p>mid)
update(p,c,mid+,r,pos<<|);
minn[pos]=min(minn[pos<<],minn[pos<<|]);
}
int query(int L,int R,int l,int r,int pos)
{
if(L<=l&&R>=r)
return minn[pos];
int mid=(l+r)>>;
int ans=inf;
if(L<=mid)
ans=min(ans,query(L,R,l,mid,pos<<));
if(R>mid)
ans=min(ans,query(L,R,mid+,r,pos<<|));
return ans;
}
int getpos(int x)
{
int st=;
int en=x;
if(query(st,en,,,)!=)
return -;
while(st<en)
{
int mid=(st+en)>>;
if(query(mid+,en,,,)!=)
en=mid;
else
st=mid+;
}
if(query(st,st,,,)==)
return st;
if(query(st+,st+,,,)==)
return st+;
}
int main()
{
int x,y,z,i,t;
while(~scanf("%d",&x))
{
memset(ans,,sizeof(ans));
memset(minn,,sizeof(minn));
for(i=;i<=x;i++)
scanf("%d",&a[i].x);
for(t=;t<=x;t++)
scanf("%d",&a[t].y);
sort(a+,a+x+,cmp);
for(i=;i<=x;i++)
{
int pos=getpos(a[i].x);
if(pos>&&ans[pos]==)
{
update(pos,a[i].y,,,);
ans[pos]=a[i].y;
}
}
int sum=;
for(i=;i<=;i++)
sum+=ans[i];
printf("%d\n",sum);
}
return ;
}
优先队列:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
#define esp 0.00000000001
const int N=2e5+,M=1e6+,inf=1e9;
struct is
{
int x,y;
}a[N];
int ans[N];
int cmp(is x,is y)
{
return x.x>y.x;
}
int main ()
{
int x,y,z,i,t;
while(~scanf("%d",&x))
{
for(i=;i<=x;i++)
scanf("%d",&a[i].x);
for(t=;t<=x;t++)
scanf("%d",&a[t].y);
sort(a+,a+x+,cmp);
priority_queue<int>q;
int flag=,ans=;
for(i=;i>=;i--)
{
while(a[flag].x>=i)
q.push(a[flag].y),flag++;
if(!q.empty())
ans+=q.top(),q.pop();
}
printf("%d\n",ans);
}
return ;
}
郭大侠与Rabi-Ribi
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)

最近郭大侠迷上了玩Rabi-Ribi这个游戏。
Rabi-Ribi呢,是一个打兔子的动作冒险游戏,萌萌哒的兔子在地上跑来跑去,好萌好萌呀~
这个游戏是这样玩的,郭大侠作为一个主角,拿着一个小锤子,他的目标是敲晕兔子,然后最后把这些敲晕的兔子都带回家。
当然咯,郭大侠想带回的兔子的总价值最高~
但是,兔子实在是太多了,郭大侠的锤子每一秒钟只能敲晕一只兔子,而且每一只兔子只会在地面上逗留a[i]a[i]秒,在a[i]a[i]秒之后,这一只兔子就会跑回自己的小窝里面。
所以郭大侠面临一些抉择,希望你能帮助他。
Input
第一行包含一个整数NN表示有NN个兔子在地上跑来跑去。
第二行NN个用空格分隔的整数a[i]a[i]表示第i只兔子冒出后停留的时间
第三行NN个用空格分隔的整数v[i]v[i]表示第i只兔子的价值。
1≤N≤1000001≤N≤100000
1≤a[i]≤50001≤a[i]≤5000
1≤v[i]≤10001≤v[i]≤1000
Output
输出郭大侠最多能获得的价值是多少
Sample input and output
| Sample Input | Sample Output |
|---|---|
5 |
24 |
3 |
3 |
Hint
死宅真可怕,连可爱的兔子都要敲晕带回家 QAQ
cdoj 1334 郭大侠与Rabi-Ribi 贪心+数据结构的更多相关文章
- cdoj 1334 郭大侠与Rabi-Ribi Label:贪心+数据结构
郭大侠与Rabi-Ribi Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 最近 ...
- cdoj 1342 郭大侠与甲铁城 树状数组+离线
郭大侠与甲铁城 Time Limit: 1500/800MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
- CDOJ 1284 苦恼的郭大侠 map启发式合并
苦恼的郭大侠 题目连接: http://acm.uestc.edu.cn/#/problem/show/1284 Description 花开雷霆崖,血染伊吕波. 公元1772年. 郭大侠终于照着天行 ...
- cdoj1334郭大侠与Rabi-Ribi
地址:http://acm.uestc.edu.cn/#/problem/show/1334 题目: 郭大侠与Rabi-Ribi Time Limit: 3000/1000MS (Java/Other ...
- cdoj1342郭大侠与甲铁城
地址:http://acm.uestc.edu.cn/#/problem/show/1342 题目: 郭大侠与甲铁城 Time Limit: 1500/800MS (Java/Others) ...
- cdoj1339郭大侠与线上游戏
地址:http://acm.uestc.edu.cn/#/problem/show/1339 题目: 郭大侠与线上游戏 Time Limit: 6000/2000MS (Java/Others) ...
- cdoj1338郭大侠与英雄学院
地址:http://acm.uestc.edu.cn/#/problem/show/1338 思路: 郭大侠与英雄学院 Time Limit: 6000/2000MS (Java/Others) ...
- cdoj1337郭大侠与阴阳家
地址:http://acm.uestc.edu.cn/#/problem/show/1337 思路: 郭大侠与阴阳家 Time Limit: 3000/4000MS (Java/Others) ...
- 郭大侠与Rabi-Ribi (优先队列)
最近郭大侠迷上了玩Rabi-Ribi这个游戏. Rabi-Ribi呢,是一个打兔子的动作冒险游戏,萌萌哒的兔子在地上跑来跑去,好萌好萌呀~ 这个游戏是这样玩的,郭大侠作为一个主角,拿着一个小锤子,他的 ...
随机推荐
- Swift-2-基本操作符
// Playground - noun: a place where people can play import UIKit // 基本运算符 // 运算符有3种: 单目运算符(如 -a),二目运 ...
- 利用sublime的snippet功能快速创建代码段
在前端开发中我们经常会输入相同的一些基本代码,例如常用的jquery引用,bootstrap框架,cssreset等等,如果每次使用时在复制粘贴感觉很麻烦,这里介绍一种更为简洁的方法 利用sublim ...
- Sqli-labs less 33
Less-33 本关和上一关的payload是一样的 http://127.0.0.1/sqli-labs/Less-33/?id=-1%df%27union%20select%201,user(), ...
- Tencent 的电话面试
Tencent的实习生招聘投了简历.然后,万万没想到昨晚腾讯IEG直接给我电话了.当时就惊呆了,我都没有找人内推,就直接电话面试了. 就为昨晚的电话面试写写感想吧!问的挺多的,基本上简历上写了的都问到 ...
- linux中的磁盘的MBR记录详解
在硬盘中,硬盘的0柱面0磁头第一个1扇区称为主引导扇区,也叫主引导记录-MBR(main boot record),其中MBR是以下三个部分组成 1.Bootloader,主引导程序---446个字节 ...
- MongoDB 管理工具:Robomongo
http://www.open-open.com/lib/view/open1383029577546.html
- 2011 ACM/ICPC 成都赛区(为2013/10/20成都现场赛Fighting)
hdu 4111 Alice and Bob 博弈:http://www.cnblogs.com/XDJjy/p/3350014.html hdu 4112 Break the Chocolate ...
- VS2008 引用程序集 没有强名称 解决办法
为项目添加强名称方法:1.右键单击项目,打开属性窗口;2.在属性窗口里选择<签名>标签,选中为程序集签名的选项,在下拉列表里选择新建 3.打开新建签名窗口,输入签名的名称密码等内容 单击确 ...
- React组件生命周期-正确执行运行阶段的函数
一. 二. <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=" ...
- 关于模态/非模态对话框不响应菜单的UPDATE_COMMAND_UI消息(对对WM_INITMENUPOPUP消息的处理)
对于模态非模态对话框默认是不响应菜单的UPDATE_COMMAND_UI消息的,需要增加对WM_INITMENUPOPUP消息的处理以后,才可以响应UPDATE_COMMAND_UI. void CX ...