牛客練習賽40 B 小A與任務(貪心)
其實是個比較套路的貪心
按照結束時間排序,每個任務依次考慮過去
n o w now now代表當前做任務花費的時間
當我們要做第 i i i個任務的時候,首先讓 n o w + = x i now+=x_i now+=xi
這時候,如果 n o w now now不大於結束時間,就往後考慮
如果 n o w now now比結束時間大了,說明前面的任務需要用金幣來騰出時間
用哪些任務來騰時間最划算??當然是 z z z值比較小的那些任務
由於我們需要動態維護 [ 1 , i ] [1,i] [1,i]任務的 z z z值
所以搞一個優先佇列即可,每次把當前任務壓入佇列
動態維護之前每個任務還有多少時間可以用金幣換,看程式碼就容易了。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5+10;
struct node{
int z,x,y;
bool operator < (const node&tmp ) const{ return z<tmp.z; }
}a[maxn]; int n;
bool com( node a,node b ){ return a.y<b.y; }
priority_queue<node>q;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d%d",&a[i].z,&a[i].x,&a[i].y );
sort( a+1,a+1+n,com );
int now = 0;//目前花費的時間
double ans = 0;//做完[1,i]任務需要花費的最少金幣
for(int i=1;i<=n;i++)
{
q.push( a[i] );
now += a[i].x;//加上完成時間
while( now>a[i].y )
{
node u = q.top(); q.pop();
int k = min( now-a[i].y,u.x );//用金幣購買的時間
ans += 1.0*k/u.z;
now -= k, u.x-=k;
if( u.x ) q.push( u );
}
}
printf("%.1f\n",ans);
}
相關文章
- nowcoder 牛客練習賽9 B
- 牛客 tokitsukaze and Soldier 貪心
- 牛客練習賽129 A-數數
- Mysql 練習(牛客網)MySql
- 牛客小白月賽95 (賽前的練習之我是小菜雞)
- 牛客小白月賽103 A--B--C
- 牛客周賽 Round 40
- 牛客SQL練習第21題SQL
- 牛客周賽 Round 36 (小白練習記)
- 牛客練習賽74 E CCA的期望(算概率的技巧+floyd處理)
- 牛客小白月賽97
- 牛客小白月賽88
- 牛客小白月賽89
- 牛客小白月賽94
- 牛客小白月賽98 A~D
- 牛客網SQL刷題31-40SQL
- Codeforces 854B Maxim Buys an Apartment:貪心
- 【牛客訓練記錄】中國地質大學(武漢)2024年新生賽(同步賽)
- 數理統計筆記[牛客專項練習]筆記
- 貪心
- [Offer收割]程式設計練習賽1 hihocoder 1271 艦隊遊戲 (狀態壓縮+貪心 好題)程式設計遊戲
- 牛客挑戰賽72 總結
- 牛客小白月賽100 A~E
- 牛客小白月賽99 C~E
- 牛客小白月賽104(A~D)
- 淺談貪心與動歸
- 野生前端的資料結構練習(12)貪心演算法前端資料結構演算法
- java練習-任務1.2-對戰遊戲Java遊戲
- 牛客小白月賽88 (小白來了)
- 牛客小白月賽101 A~E
- 反悔貪心
- Supermarket(貪心)
- C++奧賽一本通貪心題解C++
- 2017廣東工業大學程式設計競賽決賽 題解&原始碼(A,數學解方程,B,貪心博弈,C,遞迴,D,水,E,貪心,面試題,F,貪心,列舉,LCA,G,dp,記憶化搜尋,H,思維題)...程式設計原始碼遞迴面試題
- Codeforces 571B Minimization:dp + 貪心【前後相消】
- 前端例項練習 - 任務清單 To do list前端
- 牛客挑戰賽23-A.字串(尺取)字串
- 牛客小白月賽88-DE題解