Maratona Brasileira de Popcorn( 二分答案+暴力 )

题意:输入三个数n,c,t 。 桌子上有n堆爆米花,每一堆有ai个, 现在有c个人一起吃爆米花,每人每分钟最多能吃t个爆米花,但有两个规定:1.一堆爆米花只能一个人吃, 2.每个人只能吃连续的若干堆爆米花。

AC代码:

 1 #include<bits/stdc++.h>
 2 
 3 using namespace std;
 4 #define int long long 
 5 #define N 100009
 6 #define inf 1<<30
 7 int arr[N];
 8 signed main(){
 9     int n,m,k;
10     cin>>n>>m>>k;int right=0;
11     for(int i=1;i<=n;i++){
12         scanf("%lld",&arr[i]);
13         right+=arr[i];
14     }
15     int left=1;
16     int ans=0;
17     while(left<=right){
18         int mid=(left+right)/2;
19         int cnt=1;// 注意开始人数为1
20         int temp=k*mid;
21         int sum=0;
22         for(int i=1;i<=n;i++){
23             if(arr[i]>temp)
24             {
25                 cnt=inf;
26                 break;
27             }
28             sum+=arr[i];
29             if(sum>temp){
30                 cnt++; 
31                 sum=arr[i];
32             }
33         }
34         if(cnt>m){
35             left=mid+1;
36         }else{
37             ans=mid;
38             right=mid-1;
39         }
40     }
41     printf("%lld
",ans);
42     return 0;
43 }
44 
45 /*
46 5 3 4
47 5 8 3 10 7
48 */
原文地址:https://www.cnblogs.com/pengge666/p/11641801.html