bzoj3086: Coci2009 dvapravca
Description
给定平面上的 N 个点, 其中有一些是红的, 其他是蓝的.现在让你找两条平行的直线, 使得在保证
不存在一个蓝色的点 被夹在两条平行线之间,不经过任何一个点, 不管是蓝色点还是红色点
的前提下, 被夹在平行线之间的红色点个数最多
Input
第1行: 一个整数 N (1 <= N <= 1000)
第2..N+1行: 每行是一个点的坐标以及它的颜色.
坐标用2个 绝对值<10^9 的整数表示
颜色用 'R' 或 'B' 表示
Output
第1行: 仅一个整数, 被夹在平行线之间的红色点个数的最大值
令一条直线l垂直于所选平行直线,将点投影到直线上,考虑点的投影之间相对位置构成的序列,则问题转化为求序列的最长红色子串
直线旋转180度,则枚举了所有可能的倾斜角,而任意两点投影的相对位置只会发生一次变化,序列变化了O(n^2)次,因此可以用线段树维护这个序列同时维护最长红色子串
只能在序列上的投影点不发生重合时更新答案
#include<cstdio>
#include<algorithm>
typedef long long i64;
int n,ep=,ans=;
struct pos{
int x,y;
};
pos operator-(pos a,pos b){
return (pos){a.x-b.x,a.y-b.y};
}
i64 operator*(pos a,pos b){
return i64(a.x)*b.y-i64(a.y)*b.x;
}
struct point{
pos a;
int col;
bool operator<(const point&w)const{return a.y!=w.a.y?a.y<w.a.y:a.x<w.a.x;}
}ps[];
struct ev{
pos x;
int a,b;
bool operator<(const ev&w)const{return x*w.x<;}
}es[*];
char str[];
int ls[],rs[],ms[],ws[],sz[];
int max(int a,int b){return a>b?a:b;}
inline void up(int w,int l,int r){
ms[w]=max(ms[l],max(ms[r],rs[l]+ls[r]));
ls[w]=ls[l];
if(ls[l]==sz[l])ls[w]+=ls[r];
rs[w]=rs[r];
if(rs[r]==sz[r])rs[w]+=rs[l];
}
void set(int w,int v){
for(w+=,ls[w]=rs[w]=ms[w]=v,w>>=;w;w>>=)up(w,w<<,w<<^);
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;++i){
scanf("%d%d%s",&ps[i].a.x,&ps[i].a.y,str);
ps[i].col=str[]=='R';
}
std::sort(ps+,ps+n+);
for(int i=;i<=n;++i){
for(int j=;j<=n;++j){
pos w=ps[j].a-ps[i].a;
if(w.y>||w.y==&&w.x>)es[ep++]=(ev){w,i,j};
}
}
for(int i=;i<=n;++i){
ws[i]=i;
sz[i+]=;
if(ps[i].col)ls[i+]=rs[i+]=ms[i+]=;
}
for(int i=;i;--i)sz[i]=sz[i<<]+sz[i<<^],up(i,i<<,i<<^);
ans=ms[];
std::sort(es,es+ep);
for(int i=,j=;i<ep;){
for(;j<ep&&es[i].x*es[j].x==;++j);
for(;i<j;++i){
int a=es[i].a,b=es[i].b;
std::swap(ws[a],ws[b]);
if(ps[a].col!=ps[b].col){
set(ws[a],ps[a].col);
set(ws[b],ps[b].col);
}
}
ans=max(ans,ms[]);
}
printf("%d",ans);
return ;
}
bzoj3086: Coci2009 dvapravca的更多相关文章
- [COCI2009]Dvapravca 计算几何
[COCI2009]Dvapravca LG传送门 先给出考场上的\(O(n^3)\)乱搞方法:枚举一个蓝点和一个红点,找出过着两个点的直线,再枚举蓝点找出这条直线最多能往两边扩展多宽,最后枚举红点计 ...
- luogu P4385 [COCI2009]Dvapravca
传送门 我真的弱,正解都不会还打了个错的暴力 考虑平行线与x轴平行,那么可以按照y为第一关键字升序,x为第二关键字升序排序,然后合法的一段红点就是连续的一段,答案也就是最大的连续红色段 推广到一般情况 ...
- P4385 [COCI2009]Dvapravca
首先特判掉蓝点数量\(<2\)的情况.没有蓝点答案就是\(n\),有一个蓝点可以枚举一个红点,选择过这个蓝点和红点的一条线和在无穷远处的平行线(即这条线对应的两个半平面). 这里认为过一个点是与 ...
- [洛谷P4385][COCI2009]Dvapravca(咕咕咕)
题目大意:很早以前做的题 题解: 卡点: C++ Code: #pragma GCC optimize("Ofast") #pragma GCC optimize("un ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ 3090: Coci2009 [podjela]
3090: Coci2009 [podjela] Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 23 Solved: 17[Submit][Statu ...
- BZOJ 3090: Coci2009 [podjela] (树形背包)
3090: Coci2009 [podjela] Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 45 Solved: 31[Submit][Statu ...
- bzoj3087: Coci2009 misolovke
Description [misolovke]给定一个 N*N 的网格.每个格子里至少会有一个捕鼠器, 并且已知每个格子里的捕鼠器个数.现在需要在 每一行 中选取恰好 K 个连续的格子, 把里面的捕鼠 ...
- BZOJ2223:[Coci2009]PATULJCI——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2223 Description Sample Input 10 3 1 2 1 2 1 2 3 2 3 ...
随机推荐
- spring随手笔记4:ref的属性
1.local属性 引用在同一个xml的bean 只能引用bean的id <bean id="HelloWord" class="com.ltf ...
- Input 值改变触发事件
$('#keyword').bind('input propertychange', function() { $('.close-search').show();});
- redis入门指南-安装redis
纸上得来终觉浅 绝知此事要躬行 Redis官方不支持window.微软发布了可在redis的分支.不建议使用 但我确实用了. win7 redis2.8.4 php5.6 apache2.4 ht ...
- apache启动时80端口占用的解决方法
问题: (98)Address already in use: make_sock: could not bind to address [::]:80 (98)Address already in ...
- C语言基础--数组及相关
概念: 一堆相同类型的数据的有序集合 格式: 元素类型 数组名称[ 元素个数 ] 定义数组: // 定义了一个名称叫做scores的数组, 数组中可以存放3个int类型的数据 ]; // 只要定义一 ...
- PowerShell脚本:随机密码生成器
脚本名称:s随机密码生成器_v2.63.ps1脚本作用:产生随机密码.每密码字符个数,密码数量,存盘位置等可以自定义.脚本用法:脚本采用了硬编码,所以你需要打开脚本,修改如下变量:$生成密码总个数 = ...
- [转]Android,Yocto,Meego构建系统的区别
http://m.blog.csdn.net/blog/sonach_tjsd/6647829
- Day3 summary
今天主要学习了K-means算法,又过了遍Andrew教授的coursera视频,弄明白了Action书上的算法.困难出现在实例练习,申请Yahoo place finder API获得了appid, ...
- 隐匿在iOS文件系统中的隐私信息
说明: . 本文仅供安全学习及教学用途,提及的部分技术带有攻击性,请确保合法使用. . “这些都不是我干的,我就负责说出来.” . 图片仅供参考. . 本文所讨论的内容适用于iOS .4环境,其应用程 ...
- Binary Tree Inorder Traversal -- LeetCode 94
Given a binary tree, return the inorder traversal of its nodes' values. For example:Given binary tre ...