【BZOJ1071】[SCOI2007]组队(神仙题)
【BZOJ1071】[SCOI2007]组队(神仙题)
题面
题解
首先把式子整理一下,也就是\(A*h+B*v\le C+A*minH+B*minV\)
我们正常能够想到的做法是钦定一个\(minH\)然后怎么暴力。然而发现并不行,因为\(minV\)就不单调了。那么如果要暴力只能同时枚举两个\(min\)了,显然如果我们枚举完之后,按照\(A*h+B*v\)排序,满足条件的显然就是单调的了,我们把这个值叫做\(s\)。看起来很美好,然而我们忽略了一个限制条件,也就是\(h\ge minH,v\ge minV\),如果用数据结构维护显然\(GG\),前面暴力枚举已经\(O(n^2)\)了,再多个\(log\)基本凉了。
我们假装外层枚举了最小的\(minV\),按照\(h,s\)两个值分别排序。那么显然这两个满足条件的都是一段区间,考虑\(v\)的可行范围,首先\(v\ge minV\),然后假装\(h=minH\),则\(v\le minV+\frac{C}{B}\)。然后我们再把区间内所有不满足\(h\le minH\)的全部减去,似乎就是答案了。
具体的原因?我也不会,那就假装是对的吧。可以戳这里看看。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define MAX 5050
int n,A,B,C,ans,minV,mx;
struct Node{int h,v,s;void calc(){s=A*h+B*v;}}p[2][MAX];
bool cmpH(Node a,Node b){return a.h<b.h;}
bool cmpS(Node a,Node b){return a.s<b.s;}
bool check(int i,int x){return p[i][x].v<=mx&&p[i][x].v>=minV;}
int main()
{
scanf("%d%d%d%d",&n,&A,&B,&C);
for(int i=1;i<=n;++i)
{
scanf("%d%d",&p[0][i].h,&p[0][i].v);
p[0][i].calc();p[1][i]=p[0][i];
}
sort(&p[0][1],&p[0][n+1],cmpH);
sort(&p[1][1],&p[1][n+1],cmpS);
for(int i=1;i<=n;++i)
{
minV=p[0][i].v,mx=minV+C/B;
int l=0,r=0,cnt=0;
for(int j=1;j<=n;++j)
{
while(r<n&&p[1][r+1].s-A*p[0][j].h-B*p[0][i].v<=C)cnt+=check(1,++r);
while(l<n&&p[0][l+1].h<p[0][j].h)cnt-=check(0,++l);
ans=max(ans,cnt);
}
}
printf("%d\n",ans);return 0;
}
【BZOJ1071】[SCOI2007]组队(神仙题)的更多相关文章
- bzoj1071[SCOI2007]组队
1071: [SCOI2007]组队 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 2472 Solved: 792[Submit][Status][ ...
- BZOJ1071: [SCOI2007]组队【双指针】【思维好题】
Description NBA每年都有球员选秀环节.通常用速度和身高两项数据来衡量一个篮球运动员的基本素质.假如一支球队里速度最慢的球员速度为minV,身高最矮的球员高度为minH,那么这支球队的所有 ...
- BZOJ 1071 [SCOI2007]组队
1071: [SCOI2007]组队 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1330 Solved: 417[Submit][Status][ ...
- [SCOI2007]组队 差分
题面:[SCOI2007]组队 题解: 一开始固定H然后找性质找了很久也没有找到任何有用的东西...... 然后大佬告诉我一个神奇的方法... 首先我们化一波式子: 设$H$表示高度的最小值,$V$表 ...
- 【BZOJ5285】[HNOI2018]寻宝游戏(神仙题)
[BZOJ5285][HNOI2018]寻宝游戏(神仙题) 题面 BZOJ 洛谷 题解 既然是二进制按位的运算,显然按位考虑. 发现这样一个关系,如果是\(or\)的话,只要\(or\ 1\),那么无 ...
- 【BZOJ5213】[ZJOI2018]迷宫(神仙题)
[BZOJ5213][ZJOI2018]迷宫(神仙题) 题面 BZOJ 洛谷 题解 首先可以很容易的得到一个\(K\)个点的答案. 构建\(K\)个点分别表示\(mod\ K\)的余数.那么点\(i\ ...
- 【agc006f】Blackout(神仙题)
[agc006f]Blackout(神仙题) 翻译 给定一个\(n*n\)的网格图,有些格子是黑色的.如果\((x,y),(y,z)\)都是黑色的,那么\((y,x)\)也会被染黑,求最终黑格子数量. ...
- 1071: [SCOI2007]组队
1071: [SCOI2007]组队 https://lydsy.com/JudgeOnline/problem.php?id=1071 分析: dp+单调性. A*(hi–minH)+B*(si–m ...
- 【BZOJ3244】【NOI2013】树的计数(神仙题)
[BZOJ3244][NOI2013]树的计数(神仙题) 题面 BZOJ 这题有点假,\(bzoj\)上如果要交的话请输出\(ans-0.001,ans,ans+0.001\) 题解 数的形态和编号没 ...
随机推荐
- mysql数据库怎么存入emoji表情,更改utf8mb4后为什么出现全是问号
在项目中遇到有人存emoji表情,出现如下错误: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for colum ...
- java中CyclicBarrier简单入门使用
一个同步辅助类,它同意一组线程互相等待,直到到达某个公共屏障点 (common barrier point). 在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待.此时 CyclicBarr ...
- 20155226 《网络攻防》 Exp1 PC平台逆向破解(5)M
20155226 <网络攻防> Exp1 PC平台逆向破解(5)M 实践目标 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串 该程序同时包含另一个代 ...
- mfc 动态为控件添加事件2
重载窗口过程 为动态控件绑定事件 一.重载窗口过程处理函数 CWnd::WindowProc virtual LRESULT WindowProc( UINT message, WPARAM wPar ...
- python 回溯法 子集树模板 系列 —— 3、0-1背包问题
问题 给定N个物品和一个背包.物品i的重量是Wi,其价值位Vi ,背包的容量为C.问应该如何选择装入背包的物品,使得放入背包的物品的总价值为最大? 分析 显然,放入背包的物品,是N个物品的所有子集的其 ...
- libgdx学习记录8——对话框Dialog
Dialog在游戏中也很常用,尤其在设置.退出.商店.暂停等画面.Dialog的使用也可以通过skin实现,也可以自定义. 下面是一个简单的实例: package com.fxb.newtest; i ...
- 在 OSX 下使用 supervisor 管理服务
我为什么想用 supervisor 来管理服务呢?因为我在系统管理上属于处女座+任性的气质. OSX 下办公用的是普通用户,我不想在 root 权限下做过多设置污染我的系统. OSX 下的服务管理我感 ...
- Nginx 配置高可用
阅读本文需要安装Nginx 一 什么是高可用 nginx作为负载均衡服务器 所有请求都到了nginx 可见nginx处于非常重要的位置 如果nginx服务器宕机 后端web服务器将无法提供服务 影响严 ...
- 用Unity简单实现第三人称人物的移动和转向
上图不重要,因为实现人物的移动用的是动画,没有什么可说的,主要是下面实现人物的转向. 比如在一个平面中,玩家按了w和d键则人物会面向右前方向前进,如果此时玩家按了a和s键则人物会面向左后方向前进,那么 ...
- 在Linux系统中安装caffe
学习深度学习已经很久了,但一直没有自己动手安装过caffe,因为工作需要,需要在linux系统中安装caffe,因此,在这里对安装过程进行记录. caffe配置起来比tensorflow更麻烦一些,我 ...