首页 > 其他分享 >[NOIP2011 提高组] 聪明的质监员

[NOIP2011 提高组] 聪明的质监员

时间:2024-02-03 14:55:37浏览次数:29  
标签:NOIP2011 min int ll 质监 v2 聪明 w2 check

原题链接

首先要读懂题目啊 :[Wj>=W] 其实是一种bool表达,即大于等于时取1,小于时取0,然后再进行求和。

根据要求出 最小值 大概可以猜测要运用二分,那么我们来判断单调性,首先W在所有矿石的最大最小值之间取值,W越小Y越大,W越大Y越小(观察和推理都很容易得到),那么Y是符合单调性的,即可以运用二分。

而题目又给出了m个区间,如果都一个区间一个区间的遍历时间复杂度就是O(n*m*logv)肯定会超时,那么就很容易联想到前缀和将复杂度变为O((n+m)logv)。

所以这题考察的就是 二分+前缀和 ,外加一些阅读理解

在这里我是对W进行二分然后求出对应的Y去跟s比较从而缩小区间。

主要代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
int w[N],v[N],w2[N],l[N],r[N];
ll s,v2[N];
int n,m;
ll check(int W){
    memset(w2,0,sizeof(w2));
    memset(v2,0,sizeof(v2));
    for (int i=1;i<=n;i++){
        if (w[i]>=W){    //对w,v数组进行预处理
            w2[i]=1;
            v2[i]=v[i];
        }
        w2[i]+=w2[i-1];   //进行前缀和
        v2[i]+=v2[i-1];
    }
    ll sum=0;
    for (int i=1;i<=m;i++)
        sum+=(w2[r[i]]-w2[l[i]-1])*(v2[r[i]]-v2[l[i]-1]);  //累加求值
    return sum;
}
int main(){
    ios::sync_with_stdio(false);
    cin>>n>>m>>s;
    int min_=1e6+5,max_=0;
    for (int i=1;i<=n;i++){
        cin>>w[i]>>v[i];
        min_=min(min_,w[i]);
        max_=max(max_,w[i]);
    }
    for (int i=1;i<=m;i++) cin>>l[i]>>r[i];
    int left=min_-1,right=max_+1;   //理论上check(left)>s   check(right)<=s 但是也可能无论怎么取都取不到W使得check(W)>s
    while (left+1<right){   //对W进行二分
        int mid=left+(right-left>>1);
        if (check(mid)>s) left=mid;   
        else right=mid;
    }
    ll cnt;
    cnt=min(abs(s-check(right)),abs(s-check(left)));
    cout<<cnt;
    return 0;
}

 

标签:NOIP2011,min,int,ll,质监,v2,聪明,w2,check
From: https://www.cnblogs.com/purple123/p/18004785

相关文章

  • 通达信聪明成交量副图指标公式源码
    变量0:=5;变量1:=10;变量2:=60;DRAWBAND(MA(VOL,变量0),RGB(188,88,98),MA(VOL,变量1),RGB(0,188,0));DRAWBAND(MA(VOL,变量0),RGB(160,0,0),MA(VOL,变量2),RGB(83,123,68));变量5:=IF(PERIOD=5,240,IF(PERIOD=4,60,IF(PERIOD=3,30,IF(PERIOD=2,15,IF(PERIOD=1,5,......
  • 聪明购物秘籍:如何规避Shopee账号关联封号风险
    在Shopee平台上,规定一个买家只能拥有一个买家号,同时在一台电脑或者一个手机上登录多个买家号可能导致关联封号的风险。为了规避这一风险,许多购物达人正在寻找方法来防止账号关联。下面是一些使用大量Shopee买家号的技巧,帮助您巧妙应对这一挑战。1、防指纹技术的应用要使用大量Shope......
  • 稻盛和夫:真正的聪明人,善于把事物简单化
    稻盛先生说:   我们往往有一种倾向,就是将事物考虑得过于复杂。但是,事物的本质其实极为单纯。乍看很复杂的事物,不过是若干简单事物的组合。人类的遗传基因,由多达30亿个盐基排列构成,但是表达基因的密码种类仅有4个。   真理之布由一根纱线织成。把事情看得越单纯,就越接近真相,......
  • 聪明办法学python-12.4——12.8笔记打卡
     python中Debug的方法  必要性:在于程序可能出现不符合预期结果的情况 困难:在于bug的出触发原因多种多样,只能看到最终结果 调试代码的基本思路:让bug在设计时更容易暴露出来,包括利用print和断言来解决简单问题,利用IDE进行调试 常见的错误:函数未定义会报错,需要检查函数......
  • debug-聪明办法学Python
    如何Debug调试理论开始调试之前通过不断地调试,比如在循环中打印某个元素检查不得不承认机器永远只认编程语言不过你必须要时刻关注你的变量名称是否发生变更,这在大改前必须要注意的调试已知程序有bug,如何找到?调试困难的根本原因因为bug的触发经历了漫长的过程需求->设......
  • 聪明办法学Python 选学02
    聪明办法学Python学习笔记调试Debug1.如何进行Python程序调试,包括调试理论和常用模块与库的使用调试的必要性在于程序可能出现不符合预期结果的情况调试的困难在于bug的触发原因多种多样,只能看到最终结果2.调试代码的基本思路和方法,包括利用print和断言来解决简单......
  • 聪明办法学python最后一集
    聪明办法学python最后一集关于程序员如何进行debug首先编程哲学机器永远是对的可以使用print进行一部分的实验(这也算是我经常使用的方法)断点调试就是从上向下执行时进行的判断bug位置断点这个地方,主要分为两步:「找断点」和「打断点」。找断点,就是你想调试的代码块的......
  • 聪明办法学python第5次笔记打卡
    Debugging关于debug的方法1.使用print语句打印变量的值2.使用assert语句判断程序的错误3.使用pdb模块,(Python的调试器)可以在程序中设置断点,单步调试4.使用IDE的内置调试器5.向人工智能求助常见错误1.缩进错误切忌tab和空格混用2.语法错误3.命令错误使用了未定义的函......
  • 聪明办法学python(5)
    聪明办法学python(5)debug调试方法print调试:将程序分段后添加print,锁定问题发生地assert调试:表达式是否成立ide调试:查看报错CV工程师:向人工智能求助常见报错缩进错误(IndentationError)切忌tab和空格混用语法错误(GrammarError)命令错误(CommandError)使用了未定义的函数......
  • ###聪明办法学python Task07:debug调试
    debug的调试1.调试理论的简单介绍在计算机中,我们将机器看作状态机,同时我们遵循计算机不会犯错的原则,因此,如果程序运行不对劲,好好想想是不是自己的问题2.看懂报错信息编译器的报错要看懂,看不懂用翻译调试方法1.print调试:将程序分段后添加print,锁定问题发生地2.assert调试:表......