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
,以及時間t
tt,求在前t
tt小時中,所有猴子共吃了多少小時。
input
第一行兩個數n
nn和t
tt;之後n
nn行,第i+1
i+1i+
1行每行三個數xi,
yi,z
ix_i,y_i,z_i
xi,yi
,zi
.( 0≤
n≤10
5,1≤
t≤2⋅
109,
x+y+
z>0,
0≤x,
y,z≤
2⋅10
9)
(0\le n\le 10^5,1\le t\le 2\cdot 10^9,x+y+z>0,0\le x,y,z\le 2\cdot 10^9)
(0≤n≤1
05,1
≤t≤2
⋅109
,x+y
+z>0,
0≤x,
y,z≤
2⋅10
9)output
一行乙個數表示答案.
sample input
10 100000000
1 0 0
1 0 5
1 2 2
1 2 8
1 3 0
1 5 0
1 5 2
1 5 5
1 7 0
1 8 3
sample output
solutionk
kk天後猴子花費k(x
+y)+
k(k−
1)2z
k(x+y)+\fracz
k(x+y)
+2k(
k−1)
z小時,其中ky+
k(k+
1)2z
ky+\fracz
ky+2k(
k+1)
z小時在吃,二分k
kk,剩下一段時間單獨算即可,注意期間乘法會爆lon
glon
glong\ long
longlo
ng,此時只需要特判z=0
z=0z=
0的情況然後用除法來避免該情況
code
#include#includeusing namespace std;
typedef long long ll;
int n;
ll x,y,z,t;
int main()
ll l=0,r=2e9,mid,k=0,temp;
while(l<=r)
res+=k*y+k*(k-1)/2*z+max(t-k*(x+y)-k*(k-1)/2*z-x,0ll);
} printf("%lld\n",res);
return 0;
}
newcoder猴子吃香蕉
有n只猴子,第i只猴子每過xi小時會連續吃香蕉yi小時。猴子從第二次開始每次休息結束後這只猴子連續吃香蕉的時間會增加zi小時。給定 n只猴子,每乙隻的 xi,yi,zi,以及時間 t,求在前 t小時中,所有猴子共吃了多少小時。對於乙隻猴子來說是這樣的 從第1小時開始 休息xi小時 1 x i 吃yi...
猴子吃香蕉 遞迴
這裡寫5只猴子是好朋友,在海邊的椰子樹上睡著了。這期間,有商船把一大堆香蕉忘記在沙灘上離去。第1只猴子醒來,把香蕉均分成5堆,還剩下1個,就吃掉並把自己的乙份藏起來繼續睡覺。第2只猴子醒來,重新把香蕉均分成5堆,還剩下2個,就吃掉並把自己的乙份藏起來繼續睡覺。第3只猴子醒來,重新把香蕉均分成5堆,還...
猴子吃香蕉 藍橋杯
5只猴子是好朋友,在海邊的椰子樹上睡著了。這期間,有商船把一大堆香蕉忘記在沙灘上離去。第1只猴子醒來,把香蕉均分成5堆,還剩下1個,就吃掉並把自己的乙份藏起來繼續睡覺。第2只猴子醒來,重新把香蕉均分成5堆,還剩下2個,就吃掉並把自己的乙份藏起來繼續睡覺。第3只猴子醒來,重新把香蕉均分成5堆,還剩下3...