当前位置:   article > 正文

CCF-CSP 202303-2 垦田计划

垦田计划

本题解法多,这里介绍用二分答案

首先复现一下二分板子,这里只介绍该题用到的。

 该题中,minAns是每块区域的最少开垦天数。maxAns是开垦天数的最大值1e5。

接下来是check函数

考虑二分得到的答案x,在函数内统计该答案下所耗费的总资源数sum,即(每块耕地的资源-x)*投入资源数量。如果总资源数sum<=m,返回true,否则返回false。

算法总的时间复杂度为O(nlogm)

具体代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int maxn=100005;
  4. const int INF=1e9;
  5. typedef long long ll;
  6. int n,k,ans,maxt;
  7. ll m;
  8. struct node{
  9. int t,c,cnt;
  10. }a[maxn];
  11. bool check(int x){
  12. ll sum=0;
  13. for(int i=1;i<=n;i++){
  14. sum += (max(0,a[i].t-x))*a[i].c;
  15. }
  16. if(sum <= m)return true;
  17. return false;
  18. }
  19. int main() {
  20. cin>>n>>m>>k;
  21. for(int i=1;i<=n;i++){
  22. cin>>a[i].t>>a[i].c;
  23. maxt=max(maxt,a[i].t);
  24. }
  25. int l=k,r=1e5+5;
  26. while(l<=r){
  27. int mid=l+(r-l)/2;
  28. if(check(mid)){
  29. ans = mid;
  30. r=mid-1;
  31. }
  32. else l=mid+1;
  33. }
  34. cout<<ans;
  35. return 0;
  36. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/215680
推荐阅读
相关标签
  

闽ICP备14008679号