聪明的质监员

题目链接:https://www.luogu.org/problemnew/show/P1314

Y(W)随W的值增大而减小

二分W的值,找到最小的W使得Y(W)>S;

比较Y(W)和Y(W-1)与S的差值。

计算Y(W):

O(n)预处理一维前缀和数组,

O(m)暴力计算出Y(W)

 #include<cstdio>
using namespace std;
long long n,m,S,ranges[][],w[],v[];
inline long long abs(long long x)
{
if(x<) x=-x;
return x;
}
inline long long min(long long a,long long b)
{
return a<b?a:b;
}
long long sum1[],sum2[];
long long Y(long long x) //计算Y(W)
{
long long ans=;
sum1[]=;sum2[]=;
for(int i=;i<=n;i++)
if(w[i]>x) {
sum1[i]=sum1[i-]+;    //前缀和数组sum1记录个数和
sum2[i]=sum2[i-]+v[i];  //sum2记录价值和
}
else {
sum1[i]=sum1[i-];
sum2[i]=sum2[i-];
}
for(int i=;i<=m;i++)
{
int l=ranges[i][],r=ranges[i][];
ans+=(sum1[r]-sum1[l-])*(sum2[r]-sum2[l-]);
}
return ans;
}
int main()
{
int l=,r=;
scanf("%lld%lld%lld",&n,&m,&S);
for(int i=;i<=n;i++)
{
scanf("%lld%lld",&w[i],&v[i]);
if(w[i]>r) r=w[i];
}
for(int i=;i<=m;i++)
scanf("%lld%lld",&ranges[i][],&ranges[i][]);
while(l<r)           //二分W
{
int mid=(l+r)>>;
if(Y(mid)>=S) l=mid+;
else r=mid-;
}
if(Y(l)<S) l-=;
printf("%lld\n",min(abs(Y(l)-S),abs(Y(l+)-S)));
return ;
}

【洛谷P1314】[NOIP2011]聪明的质监员的更多相关文章

  1. 【洛谷p1314】聪明的质监员

    聪明的质监员[题目链接] 有关算法: 二分答案: 但是你只二分答案是不够的,因为你check会炸,所以还要考虑前缀和: 首先假装我们的check已经写好了,main函数: int main() { n ...

  2. 洛谷 P1314 【聪明的质监员】

    二分 思路: 这道题思路还是蛮好想的,一开始想的是暴力枚举w,然后再仔细一看,w增长时,y肯定减小,那么思路出来了: 二分 但是在时二分时,分得是左右端点lr,做错了 求出w的上下界,然后二分 只二分 ...

  3. NOIP2011聪明的质监员题解

    631. [NOIP2011] 聪明的质监员 ★★   输入文件:qc.in   输出文件:qc.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 小 T 是一名质量监督 ...

  4. NC16597 [NOIP2011]聪明的质监员

    NC16597 [NOIP2011]聪明的质监员 题目 题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 \(n\) 个矿石,从 \(1\) 到 \(n\) 逐一编号,每个矿 ...

  5. 洛谷P1314 [NOIP2011提高组Day2T2] 聪明的质监员

    P1314 聪明的质监员 题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi .检验矿产的流程是: ...

  6. 题解【洛谷P1314】[NOIP2011]聪明的质监员

    题面 题解 不难发现,\(W\)增大时,\(Y\)值会随之减小. 于是考虑二分\(W\). 如何\(\mathcal{O}(N)check?\) 每一次前缀和记录一下\(1-i\)之间\(w_i \g ...

  7. [NOIP2011]聪明的质监员 题解

    题目大意: 额--貌似蛮清晰的,就不赘述了. 思路: 首先不难发现M越大Y越小,因此可以二分答案(方向不要弄错),二分出最小的不小于S的Y即可.而计算Y时可用前缀和O(n+m)求得.两种边界情况也要考 ...

  8. NOIP2011 聪明的质监员

    描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi .检验矿产的流程是: 1 .给定m 个区间[Li  ...

  9. [NOIP2011] 聪明的质监员 二分+前缀和

    考试的时候打的二分但没有用前缀和维护.但是有个小细节手误打错了结果挂掉了. 绝对值的话可能会想到三分,但是注意到w增大的时候y是减小的,所以单调性很明显,用二分就可以.但注意一个问题,就是二分最后的结 ...

随机推荐

  1. Maven使用之packing篇

    项目的打包类型:pom.jar.war 项目中一般使用maven进行模块管理,每个模块下对应都有一个pom文件,pom文件中维护了各模块之间的依赖和继承关系.项目模块化可以将通用的部分抽离出来,方便重 ...

  2. windows下修改了系统变量里java_home所引用的jdk,但是查询jdk的版本并没有发生改变

    # 原因:因为%SystemRoot%\system32 在引用这个环境变量时,会默认C:\Windows\System32下的jdk版本 # 解决方法: 把jdk的配置放在path前面就可以了

  3. listview适配器中的控件的点击事件并传值

    @Override public View getView(final int position, View convertView, ViewGroup parent) { // TODO Auto ...

  4. linux 访问 windows 共享文件夹

    http://www.01happy.com/linux-access-windows-shares-folders/

  5. nginx 访问路径配置

    比如: http://127.0.0.1/ 对应的物理路径 c:/a/b/c 比如:http://127.0.0.1/eec 访问的地址对应的物理路径: d:/a/b/c #user nobody; ...

  6. Castle.DynamicProxy的使用

    .Net平台AOP技术研究 简单实现 通过继承实现 public interface ICoding { void DoSth(); } public class Coding : ICoding { ...

  7. Windows 2008 R2 防火墙允许Serv-U通过的方法

    在Windows 2008 R2上安装了Serv-U FTP服务端软件之后,无法通过客户端连接,究其原因是Windows 2008的防火墙没有开启FTP端口,而且在防火墙上添加Serv-U程序也不行, ...

  8. DEDE SQL标签可以获取文档静态链接地址

    在DedeCMS的系统里面,我可以通过由使用SQL语句来配合织梦标签进行更多的个性化调用.比如:推荐会员.推荐企业等.但是我们发现文档链接的底层模板地址的是动态的,那么我们要如何来进行转换,让他链接到 ...

  9. 60、Docker 学习笔记(CentOS 7.1)

    #基本概念 -x86_64-minimal.tar.gz | docker import - centos:v7.mini``` 然后查看导入的镜像: ##上传镜像 >用户可以通过 docker ...

  10. 浅析sorted函数中的key

    在python编程中,常对数据进行各种处理,排序尤为重要.但是在使用sorted内置函数时,我们发现它有三个参数. 第一个参数为可迭代数据,可以为一个字符串,数组,列表等等. 第三个为是否倒置输出. ...