题目 思路: 二分法查找答案->满足条件->缩小范围->最优值 AC代码
#include <bits/stdc++.h>
using namespace std
;
int a
[100001];
long long n
,c
,t
,maxx
;
int Find(int l
, int r
)
{
while(l
<=r
)
{
long long mid
=(l
+r
)/2;
long long can
=mid
*t
;
long long now
=0,ans
=1;
for(int i
=1; i
<=n
;i
++)
{
if(a
[i
]>can
){ans
=c
+1;break;}
now
+=a
[i
];
if(now
>can
){ans
++;now
=0;i
=i
-1;}
}
if(ans
<=c
) {r
=mid
-1;maxx
=mid
;}
else l
=mid
+1;
}
return maxx
;
}
int main()
{
long long sum
=0;
cin
>>n
>>c
>>t
;
for(int i
=1; i
<=n
; i
++)
{
cin
>>a
[i
];
sum
+=a
[i
];
}
long long x
=Find(1,1e9);
cout
<<x
<<endl
;
return 0;
}
转载请注明原文地址: https://mac.8miu.com/read-515638.html