日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Codeforces Round #540 (Div. 3) D. Coffee and Coursework 二分

發布時間:2023/12/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 二分的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。