2016 UESTC Training for Data Structures J - 郭大侠与Rabi-Ribi 优先队列

来源:互联网 发布:华夏网络传奇 编辑:程序博客网 时间:2024/06/07 06:41

J - 郭大侠与Rabi-Ribi

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
 

title

最近郭大侠迷上了玩Rabi-Ribi这个游戏。

Rabi-Ribi呢,是一个打兔子的动作冒险游戏,萌萌哒的兔子在地上跑来跑去,好萌好萌呀~

这个游戏是这样玩的,郭大侠作为一个主角,拿着一个小锤子,他的目标是敲晕兔子,然后最后把这些敲晕的兔子都带回家。

当然咯,郭大侠想带回的兔子的总价值最高~

但是,兔子实在是太多了,郭大侠的锤子每一秒钟只能敲晕一只兔子,而且每一只兔子只会在地面上逗留a[i]   秒,

a[i]   秒之后,这一只兔子就会跑回自己的小窝里面。

所以郭大侠面临一些抉择,希望你能帮助他。

Input

第一行包含一个整数N表示有N个兔子在地上跑来跑去。

第二行N个用空格分隔的整数a[i] 表示第i只兔子冒出后停留的时间

第三行N个用空格分隔的整数v[i]   表示第i只兔子的价值。

1N100000                                       

1a[i]5000                           

1v[i]1000              

Output

输出郭大侠最多能获得的价值是多少

Sample input and output

Sample InputSample Output
55 3 6 1 47 9 2 1 5
24
31 1 11 2 3
3

Hint

死宅真可怕,连可爱的兔子都要敲晕带回家 QAQ

Source

2016 UESTC Training for Data Structures  Problem J

My Solution

用STL里的优先队列,

倒过来做处理兔子出现的时间,总时间为maxT

那样出现就丢到优先队列里去,从这个时刻起就一直都存在了

没个时刻拿一只最大的出来 pq.top()打晕就好了

复杂度 O(n)

#include <iostream>#include <cstdio>#include <queue>#include <algorithm>using namespace std;const int maxn = 100000 +8;struct interval{    int a,v;} val[maxn];priority_queue<int> pq;bool cmp(const interval& x, const interval& y){    return x.a < y.a;}int main(){    #ifdef LOCAL    freopen("a.txt", "r", stdin);    #endif // LOCAL    int n;    long long ans = 0;    scanf("%d", &n);    for(int i = 0 ; i < n; i++)        scanf("%d", &val[i].a);    for(int i = 0 ; i < n; i++)        scanf("%d", &val[i].v);    sort(val, val+n, cmp);    int sametime = val[n-1].a;    for(int i = n-1; i >= 0; i--){        if(sametime == val[i].a) pq.push(val[i].v);        else{            for(int j = sametime; j > val[i].a; j--){                if(!pq.empty()){                    ans += pq.top();                    pq.pop();                }            }            pq.push(val[i].v);            //            sametime = val[i].a;        }    }    for(int j = sametime; j > 0; j--){        if(!pq.empty()){            ans += pq.top();            pq.pop();        }    }    //!无论如何就是给我输出-1,就算输出前加个ans = 100;还是不行 重启也不行  然后重新建一个project有正常了⊙﹏⊙b汗    printf("%lld", ans);    return 0;}


Thank you!

                                                                                                                                               ------from ProLights

0 0