Codeforces Round #540 (Div. 3) D. Coffee and Coursework 二分
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Codeforces Round #540 (Div. 3) D. Coffee and Coursework 二分
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                題解
題目大意,有若干杯咖啡,每杯咖啡有一個收益a[i],不限制每天喝多少杯,但是每天的第k杯收益會減少k-1,問總收益大于n的所需最少天數。
使用二分答案求解,每次喝肯定是挑剩余最大的去喝,check時mid天每天都只先喝第一杯如果不夠再喝第二杯第三杯。。
 在喝的過程中如果當前杯的收益小于等于當前所減少的收益則說明答案不可行。
AC代碼
#include <stdio.h> #include <bits/stdc++.h> #define fst first #define sed second using namespace std; typedef long long ll;const int INF = 0x3f3f3f3f; const ll LINF = 0x3f3f3f3f3f3f3f3f; const int N = 2e5 + 10; ll a[N]; ll n, m;bool check(ll mid) {int k = 1;ll tot = 0;for (int i = 0;; i++) //次for (int j = 0; j < mid; j++) //天{if (k > n || a[k] <= i)return 0;tot += a[k++] - i;if (tot >= m)return 1;} } int main() { #ifdef LOCALfreopen("C:/input.txt", "r", stdin); #endifcin >> n >> m;for (int i = 1; i <= n; i++)scanf("%I64d", &a[i]);sort(a + 1, a + n + 1, greater<ll>());ll l = 1, r = m, ans = -1;while (l <= r){ll mid = l + r >> 1;if (check(mid))r = mid - 1, ans = mid;elsel = mid + 1;}cout << ans << endl;return 0; }總結
以上是生活随笔為你收集整理的Codeforces Round #540 (Div. 3) D. Coffee and Coursework 二分的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: c++ 每个类都有一张虚方法表
- 下一篇: 初学Java常用设计模式之——工厂模式
