打地鼠遊戲 中石油

2021-08-21 17:47:51 字數 1368 閱讀 4659

輸入

輸入包含3行,第一行包含乙個整數n(1<=n<=100000)表示有n個地鼠從地上冒出來,第二行n個用空格分隔的整數表示每個地鼠冒出後停留的時間(maxt<=50000),第三行n個用空格分隔的整數表示每個地鼠被敲擊後會增加的分值v(v<=1000)。每行中第i個數都表示第i個地鼠的資訊。

輸出輸出只有一行乙個整數,表示所能獲得的最大遊戲總分值。

樣例輸入

5

5 3 6 1 4

7 9 2 1 5

樣例輸出

24
提示

30%的資料保證n<=100, t<=500,v<=50

60%的資料保證 n<=10000,t<=3000,v<=500

100%的資料保證 n<=100000,t<=5000,v<=1000

中文就不說題意了。有點貪心的思想,從最大加,一直到最小的(時間),所以從後往前加。

這個題本身不難,有很多方法做,但我沒想到,就想到了上午剛剛看看的set的用法(可自定義從大到小排序)就想用set寫,花了乙個小時沒弄出來,很遺憾,才明白set不能存重複的元素,查了好久找到了multiset,它是set的延伸,可以存重複的元素,可是還是wa,查了資料才知道它一刪除就刪除所有相同的元素,引入lower_bound()(找到所有相同元素最前邊的那個),這樣可以刪除第乙個。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define mem(a,b) memset(a,b,sizeof(a))

#define ll long long

using  namespace std;

int maxn (int a,int b,int c)

struct node a[100005];

struct cmp

};multisetsum;

ll cmp(node a,node b)

else

multiset::iterator temp=sum.begin();

//  multiset::iterator temp1=sum.begin();

/* for(temp=sum.begin;temp!=sum.rend();temp++)

}*/cos+=temp->cost;

sum.erase(sum.lower_bound(*temp));

tim--;}}

printf("%lld\n",cos);

return 0;

}

打地鼠遊戲

題目描述 輸入輸入包含3行,第一行包含乙個整數n 1 n 100000 表示有n個地鼠從地上冒出來,第二行n個用空格分隔的整數表示每個地鼠冒出後停留的時間 maxt 50000 第三行n個用空格分隔的整數表示每個地鼠被敲擊後會增加的分值v v 1000 每行中第i個數都表示第i個地鼠的資訊。輸出輸出...

打地鼠遊戲

時間限制 1 sec 記憶體限制 128 mb 題目描述 輸入輸入包含3行,第一行包含乙個整數n 1 n 100000 表示有n個地鼠從地上冒出來,第二行n個用空格分隔的整數表示每個地鼠冒出後停留的時間 maxt 50000 第三行n個用空格分隔的整數表示每個地鼠被敲擊後會增加的分值v v 1000...

5502 打地鼠遊戲

題目 思路 先按小鼠出現的時間從小到大排序,用nt記錄消耗的時間,當小鼠停留的時間大於nt時,將價值加到總價值上去,否則,用此小鼠的價值和已經加上去的小鼠的最小價值比較,判斷是否加上它。用優先佇列,因為優先佇列預設從大到小排序,所以要將小鼠價值的負值加到佇列中。include include inc...