朴素的做法显然是O(n3)的
考虑优化,我们将约束条件变形为A*h+B*v<=A*minh+B*minv+c
右边是一个定值,当右边确定了minh之后,随着minv的增大,原来满足条件的且v>=minv的一定还满足条件
然后我们只要先对A*h+B*v排序,然后穷举minh,然后扫一遍即可
O(n2)的算法很显然,我正好卡着时限过去的……
但这道题的本意肯定是有O(nlogn)的算法,求教导

 type node=record
h,v,s:longint;
end; var f,v:array[..] of longint;
h:array[..] of boolean;
w:array[..] of node;
ans,t,m,x,y,n,i,j,sum,s,a,b,c,k:longint; procedure swap(var a,b:node);
var c:node;
begin
c:=a;
a:=b;
b:=c;
end; procedure sort(l,r: longint);
var i,j,x: longint;
begin
i:=l;
j:=r;
x:=w[(l+r) div ].s;
repeat
while w[i].s<x do inc(i);
while x<w[j].s do dec(j);
if not(i>j) then
begin
swap(w[i],w[j]);
inc(i);
j:=j-;
end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r);
end; begin
readln(n,a,b,c);
for i:= to n do
begin
readln(x,y);
h[x]:=true;
if x>m then m:=x;
v[y]:=;
w[i].h:=x;
w[i].v:=y;
w[i].s:=a*x+b*y;
end;
sort(,n);
for i:= to do
if v[i]= then
begin
inc(t);
f[t]:=i; //表示v可能的数字
end; for i:= to m do
begin
if not h[i] then continue; //穷举minh
fillchar(v,sizeof(v),);
sum:=;
k:=;
for j:= to t do
begin
if j<> then
sum:=sum-v[f[j-]]; //对于当前minv,小于的不算
s:=a*i+b*f[j]+c;
while (k<=n) and (w[k].s<=s) do
begin
if (w[k].h>=i) and (w[k].v>=f[j]) then
begin
inc(sum);
inc(v[w[k].v]); //方便随着minv的增大,快速减去小于minv的数目
end;
inc(k);
end;
if sum>ans then ans:=sum;
if k>n then break; //后面一定只减不增
end;
end;
writeln(ans);
end.

bzoj1071的更多相关文章

  1. BZOJ1071 [SCOI2007]压缩 其他

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1071 题意概括 有两个序列a[1..n], b[1..n],其编号为1..n,设为s序列.现在我们 ...

  2. 【BZOJ1071】[SCOI2007]组队(神仙题)

    [BZOJ1071][SCOI2007]组队(神仙题) 题面 BZOJ 洛谷 题解 首先把式子整理一下,也就是\(A*h+B*v\le C+A*minH+B*minV\) 我们正常能够想到的做法是钦定 ...

  3. [bzoj1071]组队[单调指针乱搞]

    这道题也很感人,主要改了比较久的时间... bzoj第一页的题,居然只过了五百多个人,(我是第512,orzliyicheng是513) 代码不长,但是细节搞了很久,主要sort写错了,晕... 首先 ...

  4. bzoj1071[SCOI2007]组队

    1071: [SCOI2007]组队 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 2472  Solved: 792[Submit][Status][ ...

  5. BZOJ1071: [SCOI2007]组队【双指针】【思维好题】

    Description NBA每年都有球员选秀环节.通常用速度和身高两项数据来衡量一个篮球运动员的基本素质.假如一支球队里速度最慢的球员速度为minV,身高最矮的球员高度为minH,那么这支球队的所有 ...

  6. 【bzoj1071】[SCOI2007]组队

    sum= A*h+B*s排序 然后枚举height和speed的最小值 然后用两个指针:先枚举speed最小值,然后一边枚举v的最小值一边查询符合条件的人数. #include<algorith ...

  7. [bzoj1071]组队

    题目即要求$Ah+Bv<=C+Aminh+Bminv$,如果同时枚举minh和minv,那么即要求$minh\le h$,$minv\le v$且$s\le C+Aminh+Bminv$从小到大 ...

  8. BZOJ第1页养成计划

    嗯,用这篇博客当一个目录,方便自己和学弟(妹?)们查阅.不定期更新. BZOJ1000   BZOJ1001   BZOJ1002   BZOJ1003   BZOJ1004   BZOJ1005   ...

  9. BZOJ第一页刷题计划

    BZOJ第一页刷题计划 已完成:67 / 90 [BZOJ1000]A+B Problem:A+B: [BZOJ1001][BeiJing2006]狼抓兔子:最小割: [BZOJ1002][FJOI2 ...

随机推荐

  1. linux下安装redis并自启动

    最近需要使用redis作为tomcat集群的session存储介质,因此记录redis的安装步骤.redis是一款高性能的nosql,支持异步将缓存写入到磁盘中,避免宕机的意外情况导致的缓存信息丢失. ...

  2. android应用一(调用WebServices)

    搞了一个月的android,现学现卖,终于还是搞完了,停下来,整理思路,写写记录吧. 我们知道android访问远程数据库主要有两种协议,一种是SOAP,另外一种就是HTTP.而我们再看看WebSer ...

  3. tp集成支付宝担保支付

    现在的网站功能越来越全乎了,很多网站都需要做支付功能,而且很多大平台都提供了各式各样的api来扩充自己的用户和开发者.话说,这种使用大平台的api来做支付,无论是从成本上还是从开发效率上都是很好的选择 ...

  4. Sublime Text使用心得(一)

    以前写web前端样式都是用eclipse.myeclispe这些IDE开发工具,现在想纯粹的写点HTML的东西,一心想找一个轻量的编辑器,这样能够随手打开编写,方便平时业余学习.网上搜罗了一堆编辑器, ...

  5. SqlSugar-事务操作

    一.事务操作实例 特别说明: 1.特别说明:在事务中,默认情况下是使用锁的,也就是说在当前事务没有结束前,其他的任何查询都需要等待 2.ReadCommitted:在正在读取数据时保持共享锁,以避免脏 ...

  6. ROW_NUMBER () 与 PARTITION组合拳

    --在一个Book表里面里有字段AuthorID与Author表关联,现在要求按PublishDate字段倒序排列,列出每个作者的前五本书.要求有没有一条语句搞定的--可用游标或者临时表--最好解决方 ...

  7. ios专题 - CocoaPods - 安装

    职业走得很累,停下来,温故技术.顺便开始我得ios博客文章. [原创]http://www.cnblogs.com/luoguoqiang1985 安装 第一步:执行以下命令 sudo gem ins ...

  8. HDU 1114 Piggy-Bank(完全背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114 题目大意:根据储钱罐的重量,求出里面钱最少有多少.给定储钱罐的初始重量,装硬币后重量,和每个对应 ...

  9. 为什么用linear regression可以做classification

    输出空间 错误衡量方式 能不能直接用linear regression for classification 当成一个分类器回传回去 heuristic(启发式的:试探) 错误衡量 complexit ...

  10. 接触.net5年了,感觉自己的知识面很狭隘。

    08年毕业找工作期间开始接触网页开发,由于在学校了混了4年时间,我只能从html标记语言开始学习,后来应聘到一个网站建设公司,开始学习ps.Dreamweaver和asp.由于基础薄弱,一个月后离开了 ...