25482: Beauty

时间限制: 1 Sec  内存限制: 128 MB
献花: 7  解决: 3
[献花][花圈][TK题库]

题目描述

一年一度的星哥选美又拉开了帷幕

N个人报名参加选拔,每个人都有着各自的相貌参数和身材参数(不大于10000的正整数)。你的任务是尽可能让更多人被星哥选中,而唯一要求就是,在这只队伍里面的每个人,都需满足以下不等式:

A (H−h)+B(W−w)≤C

其中H和W为这个人的相貌和身材,h和w为选中者中的最小相貌参数和最小身材参数,而A、B、C为三个不大于10000的正的整型常数。

现在请计算星哥最多可以选中多少人。

输入

第一行:一个整数:N

第二行:三个分开的整数:A,B和C

第三行到第N+2行:每行有两个用空格分开的整数,分别表示一个人的相貌参数和身材参数

输出

第一行:最多被选的人数

样例输入

8
1 2 4
5 1
3 2
2 3
2 1
7 2
6 4
5 1
4 3

样例输出

5

提示

第1,2,3,4,7号可以组成一支符合要求的队伍,没有更大的队伍了

这道题第一眼看成离散化然而发现数据范围不大并不需要离散化OwO

对于这题似乎有两种解法, 一种是 $O(n^2log(n))$ 的, 还有一种似乎是 $O(n*w_{max})$ 的. 根据某dalao $wq$ 所言还能用 $CDQ$ 分治水过去w.

这里只讲第二种好了w实际评测中发现时间消耗比第一种少 $30\%$ 左右

首先枚举 $h$, 然后在内层枚举要处理的结点, 这样我们可以得到 $h$ $H$ $W$ 三个值. 结合 $A$ $B$ $C$ 与不等式我们可以计算出要使该要处理的结点被选中所需的最小 $w$ 值. 然后再根据 $W$ 值可以计算出要使该结点要被选中, $w$ 所应当落在的区间. 然后我们在数组中对区间进行差分, 计算完对于某个 $h$ 的所有结点的 $w$ 区间后对差分所得数组求前缀和处理出对于每个 $w$ 值有多少个结点被选中. 然后根据结点信息枚举可能的 $w$ 并对最终结果取 $max$. 对于所有 $n$ 个 $h$ 都计算一下, 然后全局最大值即为最优解.

其中要注意的是: 由于我们所枚举的 $h$ 是最小值, 所以对于 $H$ 值小于我们所枚举的 $h$ 的结点应直接跳过防止影响答案. 而由于 $w$ 是最小值, 则 $B(W-w) \geq 0$ , 所以 $A(H-h) \leq C$ , 所以对于 $A(H-h) > C$ 的情况我们也要直接跳过防止影响答案.

参考代码如下:

GitHub

 #include <queue>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm> const int MAXN=; struct Point{
int x;
int y;
Point(int x=,int y=){
this->x=x;
this->y=y;
}
}; int n;
int m;
int l=,r=;
int xa,ya,xb,yb;
Point q[];
int dis[MAXN][MAXN];
int melt[MAXN][MAXN];
bool visited[MAXN][MAXN]; void BFS();
void gch(char&);
void Initialize();
void SPFA(int,int); int main(){
Initialize();
BFS();
SPFA(xa,ya);
printf("%d\n",dis[xb][yb]);
return ;
} void SPFA(int x,int y){
memset(visited,,sizeof(visited));
dis[x][y]=;
q[r++]=(Point(x,y));
visited[x][y]=true;
while(l<r){
x=q[l].x;
y=q[l].y;
l++;
visited[x][y]=false;
if(x>&&dis[x][y]<dis[x-][y]&&dis[x-][y]!=melt[x-][y]){
dis[x-][y]=std::max(dis[x][y],melt[x-][y]);
if(!visited[x-][y]){
visited[x-][y]=true;
q[r++]=(Point(x-,y));
}
}
if(x<n&&dis[x][y]<dis[x+][y]&&dis[x+][y]!=melt[x+][y]){
dis[x+][y]=std::max(dis[x][y],melt[x+][y]);
if(!visited[x+][y]){
visited[x+][y]=true;
q[r++]=(Point(x+,y));
}
}
if(y>&&dis[x][y]<dis[x][y-]&&dis[x][y-]!=melt[x][y-]){
dis[x][y-]=std::max(dis[x][y],melt[x][y-]);
if(!visited[x][y-]){
visited[x][y-]=true;
q[r++]=(Point(x,y-));
}
}
if(y<m&&dis[x][y]<dis[x][y+]&&dis[x][y+]!=melt[x][y+]){
dis[x][y+]=std::max(dis[x][y],melt[x][y+]);
if(!visited[x][y+]){
visited[x][y+]=true;
q[r++]=(Point(x,y+));
}
}
}
} void BFS(){
memset(visited,,sizeof(visited));
while(l<r){
int x=q[l].x;
int y=q[l].y;
++l;
if(x>&&!visited[x-][y]&&melt[x][y]+<melt[x-][y]){
melt[x-][y]=melt[x][y]+;
visited[x-][y]=true;
q[r++]=(Point(x-,y));
}
if(x<n&&!visited[x+][y]&&melt[x][y]+<melt[x+][y]){
melt[x+][y]=melt[x][y]+;
visited[x+][y]=true;
q[r++]=(Point(x+,y));
}
if(y>&&!visited[x][y-]&&melt[x][y]+<melt[x][y-]){
melt[x][y-]=melt[x][y]+;
visited[x][y-]=true;
q[r++]=(Point(x,y-));
}
if(y<m&&!visited[x][y+]&&melt[x][y]+<melt[x][y+]){
melt[x][y+]=melt[x][y]+;
visited[x][y+]=true;
q[r++]=(Point(x,y+));
}
}
} void Initialize(){
char ch;
memset(dis,0x3F,sizeof(dis));
memset(melt,0x3F,sizeof(melt));
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
gch(ch);
if(ch=='.'){
q[r++]=(Point(i,j));
melt[i][j]=;
visited[i][j]=true;
}
else if(ch=='L'){
q[r++]=(Point(i,j));
melt[i][j]=;
visited[i][j]=true;
if(xa==){
xa=i;
ya=j;
}
else{
xb=i;
yb=j;
}
}
}
}
} void gch(char& target){
do{
target=getchar();
}while(target!='.'&&target!='X'&&target!='L');
}

Backup

以及日常图包w

[Codeup 25482] Beauty的更多相关文章

  1. [Codeup 25482]选美

    [Codeup 25482 ]选美 题目 一年一度的星哥选美又拉开了帷幕 N个人报名参加选拔,每个人都有着各自的相貌参数和身材参数(不大于 10000 的正整数).你的任务是尽可能让更多人被星哥选中, ...

  2. 暑假集训D13总结

    考试 又炸掉了= = 本来看着题就一脸茫然,默默的打暴力骗分,然后就交了卷= = 重要的是,在本机跑的毫无障碍的T3程序竟然在评测机CE啊喂,35分就没了啊喂(这可是比我现在分还高= =) 内心几近崩 ...

  3. poj 2187 Beauty Contest(凸包求解多节点的之间的最大距离)

    /* poj 2187 Beauty Contest 凸包:寻找每两点之间距离的最大值 这个最大值一定是在凸包的边缘上的! 求凸包的算法: Andrew算法! */ #include<iostr ...

  4. hdu-5496 Beauty of Sequence(递推)

    题目链接: Beauty of Sequence Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java ...

  5. POJ2187 Beauty Contest

    Description Bessie, Farmer John's prize cow, has just won first place in a bovine beauty contest, ea ...

  6. DP ZOJ 3872 Beauty of Array

    题目传送门 /* DP:dp 表示当前输入的x前的包含x的子序列的和, 求和方法是找到之前出现x的位置(a[x])的区间内的子序列: sum 表示当前输入x前的所有和: a[x] 表示id: 详细解释 ...

  7. 【POJ】2187 Beauty Contest(旋转卡壳)

    http://poj.org/problem?id=2187 显然直径在凸包上(黑书上有证明).(然后这题让我发现我之前好几次凸包的排序都错了QAQ只排序了x轴.....没有排序y轴.. 然后本题数据 ...

  8. Where does beauty come from?

    One more question, rational beauty should come from a dedicated brain and mind. Should there be more ...

  9. zoj The 12th Zhejiang Provincial Collegiate Programming Contest Beauty of Array

    http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5496 The 12th Zhejiang Provincial ...

随机推荐

  1. Linux原始套接字实现分析---转

    http://blog.chinaunix.net/uid-27074062-id-3388166.html 本文从IPV4协议栈原始套接字的分类入手,详细介绍了链路层和网络层原始套接字的特点及其内核 ...

  2. Ubuntu 10.10, 11.04, 11.10这三个版本无法从优盘启动

    问题:Ubuntu 10.10, 11.04, 11.10这三个版本无法从优盘启动 解决:从U盘启动安装的时候,会卡住不动.搞定办法相当简单,修改syslinux/syslinuxfg文件:将defa ...

  3. hadoop学习笔记(二):简单启动

    一.hadoop组件依赖关系 二.hadoop日志格式: 两种日志,分别以out和log结尾: 1 以log结尾的日志:通过log4j日志记录格式进行记录的日志,采用日常滚动文件后缀策略来命名日志文件 ...

  4. BTREE索引和HASH索引的区别

    从本质上理解,BTREE是一种有序树,而hash是无序的.所以最关键的区别在于: 1,BTREE可以用来做范围查询,比如大于,小于,而HASH索引仅在"=","IN&qu ...

  5. jquery选择器【总结】

    本文总结整理了jquery里和选择器相关的所有方法,通过这篇文章,可以让你学习到在jquery里使用选择器的所有方法. 一:基本选择器: $("#aijquery") 选择id值等 ...

  6. xcopy命令的其他参数

    xcopy /s /e /h "c:\123" "D:\123\" 后面多一个斜杠,让程序知道是目录 以下还给您提供了 xcopy 命令的其他参数: /A 仅复 ...

  7. replace替换,全局和局部替换

    <script> var a=document.getElementById("introduce").innerHTML; var b=a.replace(/jone ...

  8. 【原】zookeeper集群配置常见问题说明

    zookeeper集群网上demo一大堆,补充一下一些不明白的地方 1 复制2份zookeeper,savle作为备份节点 2.配置zoo.cfg # The number of millisecon ...

  9. Spring_Spring与DAO_Spring的事务管理

    一.Spring的事务管理 在Spring中通常可以通过以下三种方式来实现对事务的管理: 使用Spring的事务代理工厂管理事务 使用Spring的事务注解管理事务 使用AspectJ的AOP配置管理 ...

  10. .NET Core是什么

    对于开发人员,把C#语言和.NET描述为最重要的新技术一点都不夸张.NET提供了一种环境.在这种环境中,可以开发在Windows上运行的几乎所有应用程序.如:编写Web页面.WPF应用程序.REST ...