聪明的质监员

题目链接: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. Vue中的scoped和scoped穿透

    1.什么是scoped 在Vue文件中的style标签上有一个特殊的属性,scoped.当一个style标签拥有scoped属性时候,它的css样式只能用于当前的Vue组件,可以使组件的样式不相互污染 ...

  2. suffix ACM-ICPC 2017 Asia Qingdao

    Consider n given non-empty strings denoted by s1 , s2 , · · · , sn . Now for each of them, you need ...

  3. F. Cooking Time 贪心

    http://codeforces.com/gym/101498/problem/F 对于知道使用情况的置换算法,最优解是找一个最后需要使用的物品替换掉 也就是,如果一个物品后面已经不需要用到,就要拿 ...

  4. maya安装不了

    AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...

  5. Murano Weekly Meeting 2015.09.01

    Meeting time: 2015.September.1st 1:00~2:00 Chairperson:  Nikolay Starodubtsev, from Mirantis Meeting ...

  6. (转)轻松应对IDC机房带宽突然暴涨问题

    原文:http://blog.51cto.com/oldboy/909696

  7. 实现Nginx中使用PHP-FPM时记录PHP错误日志的配置方法

    最近在本地搭建的LNMP的开发环境.为了开发的时候不影响前端的正常开发就屏蔽的PHP里面php.ini中的一些错误提示.但是这样一来,就影响到了后端开发的一些问题比如不能及时调试开发中的一些问题 ng ...

  8. $.ajax、$.post

    jQuery.post( url, [data], [callback], [type] ) :使用POST方式来进行异步请求 参数: url (String) : 发送请求的URL地址. data ...

  9. Props 和 IActorRef 3

    在Actor模式中我们使用IActorRef通过ActorSystem来发送消息数据.这么做有两个理由 1.ActorSystem会在消息中封装一些元数据(metadata),这些数据我们可以通过上下 ...

  10. python 3.6 链接mssql 进行数据操作

    #!/usr/bin/env python # -*- coding: UTF-8 -*- import pymssql class MSSQL(object): ''' 对pymssql的简单封装 ...