1 约翰错过了他的公交车,他一路从家走到学校。他的学校和家之间的距离是D个单位。 2 他开始旅程时有K个单位的初始能量。他每走1个单位的距离,能量也减少1个单位。 3 在他去学校的路上,有N个果汁摊。每个摊位都有特定量的果汁(以升为单位)。 4 他每消费一升果汁,能量增加1个单位。请注意,为了让他持续走路,他的能量不应为0 5 写一个算法,帮助约翰找出为了成功到达学校他应该停下补充能量所需要的最小果汁摊位的数目。如果 6 他不能到达学校,输出将为-1; 7 输入:该函数/方法的输入包括五个参数- 8 numOfStalls表示果汁摊位数目的整数N 9 distOfStalls 表示约翰的家与摊位距离的整数列表; 10 juiceQuantity表示每个果汁摊位可获得的果汁量的整数列表 11 distance表示约翰的家和学校之间的距离的整数D 12 initialEnergy表示约翰的初始能量的整数K 13 输出: 14 返回一个整数,表示约翰为了成功到达学校而应该停下的小果汁摊位数目 15 16 int findMinNumberOfJuiceStalls(int numOfStalls, int* distOfStalls, 17 int* juiceQuantity, int distance, 18 int initialEnergy) 19 { 20 priority_queue<int> heap; 21 int curenergy = initialEnergy; 22 int res = 0; 23 for (int i = 0; i < numOfStalls; i++) 24 { 25 while (curenergy < distOfStalls[i]) 26 { 27 if (heap.empty()) 28 return -1; 29 curenergy += heap.top(); 30 res++; 31 heap.pop(); 32 } 33 heap.push(juiceQuantity[i]); 34 } 35 while (curenergy < distance) 36 { 37 if (heap.empty()) 38 return -1; 39 curenergy += heap.top(); 40 res++; 41 heap.pop(); 42 } 43 return res; 44 }
时间: 2024-07-30 10:14:27