首页 > 其他分享 >题解:洛谷 P1843 奶牛晒衣服

题解:洛谷 P1843 奶牛晒衣服

时间:2024-07-08 15:54:34浏览次数:13  
标签:二分 秒数 int 题解 i64 晒衣服 洛谷

题解:洛谷 P1843 奶牛晒衣服

  • 标签:二分,贪心

题意

给定一个数列,每秒可以将所有数减 \(a\),也可以选择一个数减 \(b\),二者可同时进行,求让所有数小于等于 \(0\) 的最小秒数。

思路

要求最小的秒数,也就是刚好所有数字小于等于 \(0\),且尽量大。

这个秒数具有单调性,考虑二分答案。

二分的过程自然是 \(O(\log n)\) 的,所以判断左右区间的函数必须在 \(O(n)\) 以内完成。

对于每一个 \(w_i\),有两种:

  • 如果 \(w_i-m\cdot a<=0\),说明目前就单靠 \(a\) 就能实现;
  • 否则就要用一定的 \(b\),那就是 \(\lceil\frac{w_i-m\cdot a}{b}\rceil\)。

假如最后 \(b\) 的使用超过了 \(m\),那说明不行,否则就是可以的。

二分的边界一直很神奇,需要多加注意。

代码

#include<bits/stdc++.h>
#define i64 long long
#define L(a,b,c) for(int i=a;i<=b;i+=c)
#define R(a,b,c) for(int i=a;i>=b;i-=c)

using namespace std;

const int N=5e5+5,M=998244353;

int n,a,b,w[N];

void solve();

signed main(){
  ios::sync_with_stdio(0);
  
  solve();
  
  return 0;
}

bool check(i64 m){
  i64 k=0;
  L(1,n,1){
    i64 x=w[i]-m*a;
    if(x>0){
      if(x%b!=0) x=x/b+1;
      else x/=b;
      k+=x;
    }
    if(k>m) return 0;
  }
  if(k<=m) return 1;
  return 0;
}

void solve(){
  cin>>n>>a>>b;
  L(1,n,1) cin>>w[i];
  i64 l=0,r=5e5,m;
  while(l<r){
    m=(l+r)/2;
    if(check(m)) r=m;
    else l=m+1;
  }
  cout<<l<<endl;
}

标签:二分,秒数,int,题解,i64,晒衣服,洛谷
From: https://www.cnblogs.com/Jessie-Pu/p/18290060

相关文章

  • CodeForces CF1980C Sofia and the Lost Operations 题解 但是最后TLE 仅供思路参考
    CodeForcesCF1980CSofiaandtheLostOperations题解嗨嗨,又来了啊,蒟蒻再来一篇题解SofiaandtheLostOperations题面翻译索菲亚有一个包含$n$个整数的数组$a[1],a[2],…,a[n]$。有一天她对这个数组感到厌倦,于是决定顺序地对其应用$m$个修改操作。每个修改操作由一......
  • 洛谷p1449后缀表达式题解
    #include<stdio.h>#include<stdlib.h>#defineMAXSIZE100typedeflongElemType;typedefstruct{ ElemType*base; ElemType*top; intStackSize;}sqStack;voidInitStack(sqStack*s){ s->base=(ElemType*)malloc (MAXSIZE*sizeof(ElemTyp......
  • 24暑期第三次训练C组题解
    目录A津津的储蓄计划auto遍历:B校门外的树memset()C杨辉三角DSpecialCharacters位运算&三目运算符EStrangeSplittingFStickogonGCardExchange构造结构体和重载运算符HLeastProductI选数JPeter的烟A津津的储蓄计划模拟题,按题意模拟即可.voidfunc(){ intjin......
  • WPF ComboBox数据绑定:初始化动态加载ItemsSource后首次赋值Text不显示问题解决
    原来:<ComboBoxText="{BindingItem}"ItemsSource="{BindingItemLists}"></ComboBox>privatevoidParas_Init(){ItemLists=newObservableCollection<string>();ItemLists.Add("111......
  • [BZOJ4350] 括号序列再战猪猪侠 题解
    我们设\(dp_{i,j}\)表示第\(i\)到第\(j\)个括号合并为序列且最外层不是括号\(i\)的可能性,\(f_{i,j}\)表示最外层是括号\(i\)的可能性。则有:\[\begin{cases}dp_{i,j}=\sumf_{i,k}(dp_{k+1,j}+f_{k+1,j})\\f_{i,j}=dp_{i+1,j}+f_{i+1,j}\end{cases}\]当然,并不是所......
  • [ABC210E] Ring MST 题解
    链接洛谷相应链接atcoder相应链接题意给n(1≤n≤......
  • CodeForces CF1986C Update Queries题解
    来吧,兄弟们,再来篇题解,其实也不是题解,是我自己的思路/心得/体会UpdateQueries题面翻译题目翻译一共$t$组数据,每组数据给定长度为$n$的字符串$s$,长度为$m$的$ind$数组和字符串$c$。你可以任意安排$ind$数组和字符串$c$的顺序,并按照此顺序对字符串$s$进行$m$......
  • **CodeForces CF1928B Equalize题解**
    ok兄弟们,今天本蒟蒻来做一篇小小的题解Equalize题面翻译有一个给定的长度为$n$的数列$a$,现在加上一个排列$b$,即$c_i=a_i+b_i$。现在求对于所有可能的$b$,$c$中出现最多的数的出现次数的最大值。translateby@UniGravity.题目描述Vasyahastwohobbies—addingpe......
  • 【DFS】深度优先搜索 洛谷选数例题讲解
    DFS深搜选数问题看一看题......
  • qoj8225 最小值之和 题解
    题目链接点击打开链接题目解法很牛的题啊从\(f\)序列的最小值切入,考虑把\(f_i:=f_i-f_{min}\),会对\(f'\)造成什么影响?发现会使\(f'\)中的每个数都减去\((n-1)f_{min}\),且会把原问题分成\([1,min]\)和\([min+1,r]\)这两个完全相同的子问题于是考虑区间\(dp\),令......