首页 > 其他分享 >Best Cow Fences(前缀和+特殊二分)

Best Cow Fences(前缀和+特殊二分)

时间:2023-06-17 10:22:23浏览次数:42  
标签:二分 Cow int 浮点数 mid 1e 答案 Fences Best

之前的二分大多数都是整数类型的,今天又学到一种新型的二分,浮点数的二分,浮点数的二分可太巧妙了.且听我细细分说:
:OpenJudge - 2018:Best Cow Fences

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,k;
double a[N],s[N],l,r;
bool check(double u)
{
    for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i]-u;
    double minn=0;
    for(int i=0,j=k;j<=n;j++,i++){
        minn=min(minn,s[i]);
        if(s[j]>minn) return true; 
    }
    return false;
}
int main()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++) cin>>a[i];
    l=0,r=3000;
    while(r-l>1e-8){
        double mid=(l+r)/2;
        if(check(mid)) l=mid;
        else r=mid;
    }
    cout<<int(r*1000);
    return 0;
}

这里有很多注意点,在浮点数二分的时候,不能执行r-1,l+1的操作,万一答案在l到l+1之间呢?这个是一个注意点

题目有说到向下取整,将最后改成cout<<int(left*1000) 是不对的,那为什么会这样?

举个例子,比如答案为6.9876543……,在精度控制在1e-5的情况下,假设得到的区间为(6.987652,6.987655),这里输出的都是6987没有问题;但是如果答案本身比1e-3精度小呢?比如答案为6.78,那么得到的区间就会为(6.77999,6.78001),用left输出就错了。

所以说,当答案的精度比1e-3更小时,你的左边区间只能将我小数点后最后一位减1,后面补上9,用左边的区间就会出错。而右边的区间会在1e-3位后面补上很小很小的数,但是我们用int转化,把这些都舍掉,正好可以得到正确答案。当然,答案的精度比1e-3更大时,就左右都可以,与向下取整契合。

标签:二分,Cow,int,浮点数,mid,1e,答案,Fences,Best
From: https://www.cnblogs.com/o-Sakurajimamai-o/p/17487112.html

相关文章

  • [USACO06FEB]Treats for the Cows G/S
    [USACO06FEB]TreatsfortheCowsG/S题目描述FJhaspurchasedN(1<=N<=2000)yummytreatsforthecowswhogetmoneyforgivingvastamountsofmilk.FJsellsonetreatperdayandwantstomaximizethemoneyhereceivesoveragivenperiodtime.Th......
  • Codeforces Round #225 (Div. 2)-C. Milking cows
    原题链接C.Milkingcowstimelimitpertestmemorylimitpertestinputoutputn cowssittinginarow,numberedfrom 1 to nIahubcandecidetheorderinwhichhemilksthecows.Buthemustmilkeachcowex......
  • papamelon 344. 奶牛展览 Cow Exhibition(挑战程序设计竞赛) dp
    地址https://www.papamelon.com/problem/344贝西有权选择让哪些奶牛参加展览。由于负的智商或情商会造成负面效果,所以贝西不希望出展奶牛的智商之和小于零,或情商之和小于零。满足这两个条件下,她希望出展奶牛的智商与情商之和越大越好,请帮助贝西求出这个最大值。输入第一行:......
  • HDU 2838 Cow Sorting(树状数组)
    题意:首先每次只能交换相邻的两头牛,并且最后要求升序排列,所以最后整个序列的逆序是0,每次交换只可以消除1个逆序。(令a[i]的逆序是从1到i-1比它大的数的个数。)思路:对于某个数,要把它变成有序的,那么很容易可以推算出公式就是它自身的逆序数乘自身的值再加上它的逆序数的和,自己算算看看。......
  • BestCoder Round #71 (div.2)1001KK's Steel
    题意:中文题思路:其实我们不去考虑N,我们只考虑最优切割策略:     首先肯定是尽量的小即1、2     既要不相等,又不能构成三角形,即每次为当前数列中最大的两项的和     那么,构成的数列为1,2,3,5,8,......     这样我们只要求最接近且小于等于N的......
  • Prompt 手册——gpt-best-practices
    本文链接:https://www.cnblogs.com/wanger-sjtu/p/17470388.html本文是OpenAIgpt-best-practices对如何使用GPT的Prompt指导。文中一共提出了六类提示词优化策略:•在查询中包含详细信息以获得更相关的答案•为模型赋予特定的角色•使用定界符清楚地指示输入的不同部分......
  • P3087 [USACO13NOV]Farmer John has no Large Brown Cow S
    正解像是康托展开之类的?但是蒟蒻不会,所以用了一堆STL。对于每一列的字符串,按照字典序给它们编号。这样每一行的形容词串就变成了一堆数字。设共有\(s\)列,第\(i\)列共有\(b_i\)个不同的形容词,那么实际上每一行就是一个“第\(i\)位是\(b_i\)进制”的数。设第\(j\)行......
  • (输出路径搜索)[USACO06OCT] Cows on Skates G
    题目描述本题使用SpecialJudge。FarmerJohn把农场划分为了一个 r 行 c 列的矩阵,并发现奶牛们无法通过其中一些区域。此刻,Bessie位于坐标为 (1,1)(1,1) 的区域,并想到坐标为 (,)(r,c) 的牛棚享用晚餐。她知道,以她所在的区域为起点,每次移动至相邻的四个区域之一,总有......
  • [USACO09MAR]Cow Frisbee Team S
    [USACO09MAR]CowFrisbeeTeamS题目描述老唐最近迷上了飞盘,约翰想和他一起玩,于是打算从他家的\(N\)头奶牛中选出一支队伍。每只奶牛的能力为整数,第\(i\)头奶牛的能力为\(R_i\)。飞盘队的队员数量不能少于\(1\)、大于\(N\)。一支队伍的总能力就是所有队员能力的总和。约......
  • dangdang_bestsellers_recent24hours
    童书文学成功/励志管理传记社会科学科普读物经济投资理财......