[SCOI2007]组队 差分
题解:
一开始固定H然后找性质找了很久也没有找到任何有用的东西。。。。。。
然后大佬告诉我一个神奇的方法。。。
首先我们化一波式子:
设$H$表示高度的最小值,$V$表示速度的最小值
$$A(h[i] - H) - B(v[i] - V) \le C$$
$$Ah[i] - AH + Bv[i] - BV \le C$$
如果我们枚举$h[i]$,那么$h[i]$就可以被当做一个常量,于是我们把常量都放在一起。
设$$S_{i} = Ah[i] - AH - C$$
则$$S_{i} + BV[i] - BV \le 0$$
$$S_{i} + BV[i] <= BV$$
$$\frac{S_{i}}{B} + V[i] \le V \le V[i]$$
最后那个$\le V[i]$是因为V是最小值.
于是我们可以发现,在固定H的情况下,对于任意一个V[i],它可以对在$[\frac{S_{i}}{B} + V[i], V[i]]$之间的V产生贡献。
于是对于每个固定的H,我们的最大答案就看V最大能被多少个点产生贡献。
差分维护即可
#include<bits/stdc++.h>
using namespace std;
#define R register int
#define AC 5500
#define ac 101000
#define LL long long int n, ans, maxn, d[ac];
int A, B, C; struct node{
int h, v;
friend bool operator < (const node &a, const node &b){return a.h < b.h;}
}s[AC]; inline int read()
{
int x = ;char c = getchar();
while(c > '' || c < '') c = getchar();
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x;
} inline void upmax(int &a, int b){
if(b > a) a = b;
} inline void pre()
{
n = read(), A = read(), B = read(), C = read();
for(R i = ; i <= n; i ++)
{
s[i].h = read(), s[i].v = read();
upmax(maxn, s[i].v);
}
sort(s + , s + n + );
} void work()
{
for(R i = ; i <= n; i ++)//枚举minh
{
int H = s[i].h, all = H * A;
for(R j = i; j <= n; j ++)//在h符合条件的点当中选点来更新minv
{
int l = (s[j].h * A - all - C) / B + s[j].v, r = s[j].v;
if(l <= ) l = ;
if(l > r) continue;
++ d[l], -- d[r + ];
}
int tmp = ;
for(R j = ; j <= maxn; j ++)
tmp += d[j], upmax(ans, tmp), d[j] = ;
}
printf("%d\n", ans);
} int main()
{
freopen("in.in", "r", stdin);
pre();
work();
fclose(stdin);
return ;
}
不知道为什么卡不过大佬QAQ。。。
[SCOI2007]组队 差分的更多相关文章
- BZOJ 1071 [SCOI2007]组队
1071: [SCOI2007]组队 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1330 Solved: 417[Submit][Status][ ...
- bzoj1071[SCOI2007]组队
1071: [SCOI2007]组队 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 2472 Solved: 792[Submit][Status][ ...
- 【BZOJ1071】[SCOI2007]组队(神仙题)
[BZOJ1071][SCOI2007]组队(神仙题) 题面 BZOJ 洛谷 题解 首先把式子整理一下,也就是\(A*h+B*v\le C+A*minH+B*minV\) 我们正常能够想到的做法是钦定 ...
- 1071: [SCOI2007]组队
1071: [SCOI2007]组队 https://lydsy.com/JudgeOnline/problem.php?id=1071 分析: dp+单调性. A*(hi–minH)+B*(si–m ...
- 【题解】SCOI2007组队
恩……为什么大家都这么执着于 \(O(n^{2})\) 的复杂度捏?如果接受 \(O(n^{2} + nV)\) 的复杂度,那这题可不是道**题吗( • ̀ω•́ )✧ 首先把所有的人按照身高排个序, ...
- 1071: [SCOI2007]组队 - BZOJ
Description NBA每年都有球员选秀环节.通常用速度和身高两项数据来衡量一个篮球运动员的基本素质.假如一支球队里速度最慢的球员速度为minV,身高最矮的球员高度为minH,那么这支球队的所有 ...
- BZOJ.1071.[SCOI2007]组队(思路)
题目链接 三个限制: \(Ah-AminH+Bv-BminV\leq C\ \to\ Ah+Bv\leq C+AminH+BminV\) \(v\geq minV\) \(h\geq minH\) 记 ...
- BZOJ1071: [SCOI2007]组队【双指针】【思维好题】
Description NBA每年都有球员选秀环节.通常用速度和身高两项数据来衡量一个篮球运动员的基本素质.假如一支球队里速度最慢的球员速度为minV,身高最矮的球员高度为minH,那么这支球队的所有 ...
- [SCOI2007]组队
嘟嘟嘟 这题有人说部分分O(n3)暴力,然而我暴力都没写过,调了半天也没用……还是看题解吧 首先,咱把A * ( h – minH ) + B * ( s – minS ) <= C 变个型,得 ...
随机推荐
- HTML5心得
1. 在做登录或搜索框的时候,可以为input加上autofocus属性,这样打开页面焦点自动在登录框或搜索框中.减少用户不必要的定位点击. 如<label>Search:<inpu ...
- underscore.js 分析 第一天
Underscore 是一个非常实用的Javascript类库. 通过研究他能提高自身的JS水平. 我们看到整个代码被 (function() { /* 代码 */ }.call(this)); 包 ...
- ThinkDev.Data更新日志
2013-09-29 10:001.重构Where.And.Or.Having.JoinTable代码,新增条件组合查询QueryGroup2.1.1.2.0 2013-09-04 09:001.修复 ...
- 惊喜Skr人,Istio的创始人Shriram Rajagopalan手把手教你如何使用Istio
Shriram与来自Google.Lyft.IBM和其他公司的社区贡献者们一起并肩作战,积极地向Istio和Envoy项目作贡献.同时,Shriram是IBM的Amalgam8项目的创始成员之一.目前 ...
- hdu1312Red and Black(迷宫dfs,一遍)
Red and Black Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- Git一分钟系列--快速安装git客户端
在项目开发过程中,几乎所有公司都会用到版本控制工具来管理自己的项目资源文件,比如Git,SVN. 什么是svn? 版本控制软件,通过svn来实现版本控制首先需要搭建一个服务器,在服务器上创建仓库保存项 ...
- (原)HUD绘画贴图解析
@小道:临时存放 1\主过程 说明: a\调用DrawTextureSimple时,会将UTexure封装成CavarsItem, 若是正交投射函数执行双,最后CavarsItem.Dra ...
- POJ 3046
题目大意:蚂蚁牙黑,蚂蚁牙红:有A只蚂蚁,来自T个家族,分别记为ant[i]个.同一个家族的蚂蚁长得一样,但是不同家族的蚂蚁牙齿颜色不同.任取n只蚂蚁(S <= n <= B),求能组成几 ...
- spark写入ES(动态模板)
使用es-hadoop插件,主要使用elasticsearch-spark-20_2.11-6.2.x.jar 官网:https://www.elastic.co/guide/en/elasticse ...
- [2017 - 2018 ACL] 对话系统论文研究点整理
(论文编号及摘要见 [2017 ACL] 对话系统. [2018 ACL Long] 对话系统. 论文标题[]中最后的数字表示截止2019.1.21 google被引次数) 1. Domain Ada ...