首页 > 其他分享 >Atcoder beginner constest319 Minimum Width

Atcoder beginner constest319 Minimum Width

时间:2023-10-14 12:01:43浏览次数:47  
标签:二分 Atcoder 10 ll constest319 mid Minimum 宽度 次方

因为要求窗口的最小宽度,当宽度为w时满足条件,那么宽度为w+1时也满足条件,有此可见是有单调性的,那么可以用二分搜的方法,且此题目一定有解。因为M最大为2乘以10的5次方,Li最大为10的9次方,所以宽度最大为2乘以10的14次方,单词每次间隔1,所以这里设成10的17次方。之后就是套二分模板解暴力模拟就可以了。

#include <iostream>
#include <cstdio>

using namespace std;
typedef long long ll;
const int N=1e6+10;
ll a[N],m,n;

bool check(ll x)
{
  ll sum=0,cnt=1; //至少为一行
  for(int i=0;i<n;++i)
  {
    if(a[i]>x) return 0; //如果字母长度大于宽度结束,宽度扩大。
    if(sum+a[i]<=x) sum+=a[i]; //字母长度小于宽度就累加,在宽度范围内就累加。
    else 
    {
      sum=a[i]; // 超出宽度就更新sum的值,跳到下一行
      cnt++;
    }
    sum++; // 每个单词相隔1
  }
  return cnt<=m; 判断宽度是否增大还是减小。
}

signed main()
{
  scanf("%lld %lld",&n,&m);
  for(int i=0;i<n;++i) scanf("%lld",&a[i]);
  ll l=1,r=1e17;    //右边界范围弄大一点,其实3乘以10的14次方足够了
  while(l<r)  //二分模板
  {
    ll mid=(l+r)>>1;
    if(check(mid)) r=mid; //不断二分,直到l等于r结束。
    else l=mid+1;
  }
  printf("%lld\n",l);
  return 0;
}

如果这篇题解对你有帮助,就献个免费的赞吧,谢谢啦

标签:二分,Atcoder,10,ll,constest319,mid,Minimum,宽度,次方
From: https://www.cnblogs.com/expect-999/p/17763973.html

相关文章

  • CF1881F Minimum Maximum Distance
    给定一棵树,树上的一些点被打上了标记,定义一个节点的贡献为其到所有标记节点距离的最大值,求最小贡献。\(n\le2\times10^5\)。这道题的原题是CF337D(甚至要更困难一些)。很套路的换根DP啊。我们考虑设\(f_i\)为\(i\)子树内的标记节点到\(i\)的最大距离,\(g_i\)为子......
  • [AGC030F] Permutation and Minimum 题解
    PermutationandMinimum看到300的数据范围,再加上计数题,很容易就往计数DP方向去想。为方便,我们将\(n\)乘二。因为是两个位置取\(\min\),于是我们便想到从小往大把每个数填入序列。于是DP数组第一维的意义便出来了:当前已经填入了前\(i\)小个数。考虑当前填入一个数。这......
  • AtCoder Regular Contest 166
    Preface上周末因为上课而且这天下午还有CF要打,所以就没现场打这场ARC了这两天事情也特别多导致写题的时间很少,摸了好久总算是补了四个题A-ReplaceCorSwapAB感觉是我做法复杂了,怎么A题码量好大首先我们找到所有\(Y\)中为\(C\)的位置,显然对应的\(X\)中的位置也必须为\(C......
  • Maximums and Minimums (CF E)
      思路:分别求出最小区间和最大区间,利用单调zai处理即可然后在利用调和级数,求最小值的倍数 后记:为什么我不2个元素都求一个区间呢?......
  • 题解 AtCoder wtf22_day1_b【Non-Overlapping Swaps】
    题解AtCoderwtf22_day1_b【Non-OverlappingSwaps】problem给定一个排列,要求交换最多\(n-1\)对元素,使得这个排列变成[1,2,...,n]的有序排列。当然没有那么简单,对于交换还是有限制的,对于相邻的两次交换,不妨叫做\((l_i,r_i)\)和\((l_{i+1},r_{i+1})\),必须满足这两个交......
  • Atcoder Grand Contest 016 E - Poor Turkeys
    先思考这样一个问题:对于一只火鸡\(i\),我们应该如何判断它最后是否能活下来。如果我们正着判断,我们其实并没有足够的证据表明每一次操作我们应该保留哪只火鸡,也就没法判断最终的答案。但是如果我们倒着考虑,我们发现,如果最后一次操作的两个火鸡都不是\(i\),那么这次操作选啥对答案......
  • [ARC130E] Increasing Minimumm
    [ARC130E]IncreasingMinimumm?考虑模拟一下题目中的过程,发现相当于将原序列按照初始值划分为若干个等价类,然后每次都会先合并等价类然后重排等价类中的所有数并加入\(I\)中。这样将\(I\)划分成了若干段。考虑假设我们一共划分出\(T\)个段,那么最终每个数的答案就是\(T\)......
  • AtCoder Regular Contest 166——A - Replace C or Swap AB
    题目描述  中文题目描述每个字符串的长度为N,由A,B和C组成。通过对X执行以下三种操作任意次数(可能为零),确定是否有可能使X与y重合。 操作(1):选择X中的字符C替换为字符A。操作(2):在X中选择字符C替换为字符B。操作(3):选择X中的子字符串AB,替换为BA。更正式地说,选择......
  • AtCoder Beginner Contest 323 (ABC 323) D、E、F 题解
    AtCoderBeginnerContest323(ABC323)D、E、F题解D题目大意给\(n\)种数\(s_i\),每一种数有\(c_i\)个,每次可以把两个相同的数合并为一个数,问最后会剩下多少数?分析对于每一个数\(s_i\),它最多被分解\(log_2c_i\)次,并且合并出来最大的数的大小小于\(s_i\timesc_i......
  • AtCoder Beginner Contest 323
    E-Playlist首先需要算出第x+0.5秒后,第一首歌播放的概率1.要在x+0.5秒后播放第一首,需要在x,x-1,x-2,...,x-t[1]+1,时就要开始播放第一首,并且概率是1/n,概率之和除以n2.概率dp,dp[i]表示播放i的概率,那么可以转换成,dp[i]+=dp[i-j]/n%mod(i>=t[j])3.答案就是x,x-1,...,x-t[1]+1概率之和......