bzoj1071
朴素的做法显然是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的更多相关文章
- BZOJ1071 [SCOI2007]压缩 其他
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1071 题意概括 有两个序列a[1..n], b[1..n],其编号为1..n,设为s序列.现在我们 ...
- 【BZOJ1071】[SCOI2007]组队(神仙题)
[BZOJ1071][SCOI2007]组队(神仙题) 题面 BZOJ 洛谷 题解 首先把式子整理一下,也就是\(A*h+B*v\le C+A*minH+B*minV\) 我们正常能够想到的做法是钦定 ...
- [bzoj1071]组队[单调指针乱搞]
这道题也很感人,主要改了比较久的时间... bzoj第一页的题,居然只过了五百多个人,(我是第512,orzliyicheng是513) 代码不长,但是细节搞了很久,主要sort写错了,晕... 首先 ...
- bzoj1071[SCOI2007]组队
1071: [SCOI2007]组队 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 2472 Solved: 792[Submit][Status][ ...
- BZOJ1071: [SCOI2007]组队【双指针】【思维好题】
Description NBA每年都有球员选秀环节.通常用速度和身高两项数据来衡量一个篮球运动员的基本素质.假如一支球队里速度最慢的球员速度为minV,身高最矮的球员高度为minH,那么这支球队的所有 ...
- 【bzoj1071】[SCOI2007]组队
sum= A*h+B*s排序 然后枚举height和speed的最小值 然后用两个指针:先枚举speed最小值,然后一边枚举v的最小值一边查询符合条件的人数. #include<algorith ...
- [bzoj1071]组队
题目即要求$Ah+Bv<=C+Aminh+Bminv$,如果同时枚举minh和minv,那么即要求$minh\le h$,$minv\le v$且$s\le C+Aminh+Bminv$从小到大 ...
- BZOJ第1页养成计划
嗯,用这篇博客当一个目录,方便自己和学弟(妹?)们查阅.不定期更新. BZOJ1000 BZOJ1001 BZOJ1002 BZOJ1003 BZOJ1004 BZOJ1005 ...
- BZOJ第一页刷题计划
BZOJ第一页刷题计划 已完成:67 / 90 [BZOJ1000]A+B Problem:A+B: [BZOJ1001][BeiJing2006]狼抓兔子:最小割: [BZOJ1002][FJOI2 ...
随机推荐
- sqlmap
http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 当给sqlmap这么一个url的时候,它会: 1.判断可注入的参数 2.判断可以用那种SQL注 ...
- Gym 100187M-Heaviside Function
题意:给定函数: f(x) = θ(s1x - a1) + θ(s2x - a2) + ... + θ(snx - an), where si = ± 1. Calculate its values ...
- mysql-distinct去重、mysql-group …
一.MYSQL-distinct用法 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记 ...
- wget 使用技巧
wget 是一个命令行的下载工具.对于我们这些 Linux 用户来说,几乎每天都在使用它.下面为大家介绍几个有用的 wget 小技巧,可以让你更加高效而灵活的使用 wget. $ wget -r -n ...
- WIN7 VMware Ubuntu虚拟机连接secureCRT及ftp传输文件
一.安装vmware没有问题,网络设置以NAT方式(VMnet8是vmware专属的虚拟网卡).安装完毕后设置虚拟机的 VirtualNetworkEditor(可以再开始->所有程序VMwar ...
- 基于url拦截实现权限控制
用户表,角色表,用户角色表,权限表,权限角色表 1.用户通过认证(可以是验证用户名,密码等) 2.登陆拦截器,为公开的url放行, 登陆时,将用户信息放入session中,获得用户的权限集合,将集合放 ...
- PL/SQL 中文转换为\uxxxx格式(unicode)
用plsql生成json的时候,经常要处理中文的情况. SELECT replace(asciistr('你好,,hello'),'\','\u') FROM dual 输出:\u4F60\u597D ...
- C# json与对象之间的相互转换
1. 添加命名空间 using System.Runtime.Serialization.Json; 2. WriteObject方法 // 从一个对象信息生成Json串 public static ...
- Flex基础相关
本篇文章转载于http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html,原作者阮一峰. 网页布局(layout)是CSS的一个重点应用. 布局的 ...
- Visual EmbedLinux Tools:让vs支持嵌入式Linux开发(转)
转自:http://blog.csdn.net/lights_joy/article/details/49499743 1 什么是Visual EmbedLinux Tools Visual Embe ...