Newcoder 26 A 猴子吃香蕉(二分)

2021-08-30 13:25:14 字數 1854 閱讀 2642

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...