有n只猴子,第i只猴子每過xi小時會連續吃香蕉yi小時。猴子從第二次開始每次休息結束後這只猴子連續吃香蕉的時間會增加zi小時。
給定 n只猴子,每乙隻的
xi,yi,
zi,以及時間
t,求在前
t小時中,所有猴子共吃了多少小時。
對於乙隻猴子來說是這樣的:
從第1小時開始:
休息xi小時( 1 -> x
i )
吃yi小時( x
i + 1 -> x
i + y
i )休息x
i小時吃y
i+zi小時
休息xi小時
吃yi+z
i+zi小時
....
假設乙個猴子吃了k階段,k個階段就是(x+y) + (x+y+z) + (x+y+z*2) + (x+y+z*3)....
所以二分k的上限.然後再處理一下剩下的時間,注意z的值為0的情況,還有二分的上限不能過大.
#include#include#include#includeusing namespace std;
typedef long long ll;
const int maxn = 1e5+10;
int n;
ll t;
ll x[maxn],y[maxn],z[maxn];
inline bool check(ll mid,int k)
int main()
ll l = 0,r = 1e5,mid,ans;
while(l<=r)
sum += ans*y[i] + ans*(ans-1)/2*z[i];
ll tmp = t-ans*(x[i]+y[i]) - ans*(ans-1)/2*z[i];
tmp -= x[i];
if(tmp>0&&y[i]&&z[i])
else if(tmp>0&&!y[i]&&z[i])
}printf("%lld\n",sum);
return 0;
}
Newcoder 26 A 猴子吃香蕉(二分)
description有n nn只猴子,第i ii只猴子每過x ix i xi 小時會連續吃香蕉y iy i yi 小時。猴子從第二次開始每次休息結束後這只猴子連續吃香蕉的時間會增加z iz i zi 小時。給定n nn只猴子,每乙隻的xi,yi,z ix i,y i,z i xi yi zi 以及...
猴子吃香蕉 遞迴
這裡寫5只猴子是好朋友,在海邊的椰子樹上睡著了。這期間,有商船把一大堆香蕉忘記在沙灘上離去。第1只猴子醒來,把香蕉均分成5堆,還剩下1個,就吃掉並把自己的乙份藏起來繼續睡覺。第2只猴子醒來,重新把香蕉均分成5堆,還剩下2個,就吃掉並把自己的乙份藏起來繼續睡覺。第3只猴子醒來,重新把香蕉均分成5堆,還...
猴子吃香蕉 藍橋杯
5只猴子是好朋友,在海邊的椰子樹上睡著了。這期間,有商船把一大堆香蕉忘記在沙灘上離去。第1只猴子醒來,把香蕉均分成5堆,還剩下1個,就吃掉並把自己的乙份藏起來繼續睡覺。第2只猴子醒來,重新把香蕉均分成5堆,還剩下2個,就吃掉並把自己的乙份藏起來繼續睡覺。第3只猴子醒來,重新把香蕉均分成5堆,還剩下3...