P4385 [COCI2009]Dvapravca
首先特判掉蓝点数量\(<2\)的情况。没有蓝点答案就是\(n\),有一个蓝点可以枚举一个红点,选择过这个蓝点和红点的一条线和在无穷远处的平行线(即这条线对应的两个半平面)。
这里认为过一个点是与这个点无限接近,红点的话认为红点在平行线中,蓝点不在平行线中
构造方案的时候想象两个阶段:
- 如果有一条线不过蓝点,可以继续向外扩张直到过蓝点为止,现在两条平行线固定过两个蓝点
- 如果没有平行线过红点,可以旋转这两条平行线知道一个平行线过红点为止。这个过程不会损失红点,而且可能加入新的红点。
所以结论是:两条平行线肯定分别过两个蓝点,而且还有一条平行线过一个红点。
先枚举一个蓝点和一个红点,一条线过这两个点;然后找到在两个方向距离这条线最近的蓝点,直接算红点数量即可。
复杂度\(O(n^3)\)。
直接做肯定过不去,所以先把整张图随机旋转,然后按照x坐标排序。
时间的正确性请咨询@Leo______ 。
#include<bits/stdc++.h>
#define il inline
#define vd void
il int gi(){
int x=0,f=0;char ch=getchar();
while(!isdigit(ch))f^=ch=='-',ch=getchar();
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return f?-x:x;
}
struct point{double x,y;}r[1010],b[1010];
il bool operator<(const point&a,const point&b){return a.x<b.x;}
char col;
int main(){
#ifndef ONLINE_JUDGE
freopen("in.in","r",stdin);
freopen("out.out","w",stdout);
#endif
int n=gi(),R=0,B=0;
srand(time(NULL));
double v=rand()%1000*0.1+0.1;
for(int i=1;i<=n;++i){
int _x=gi(),_y=gi();
do col=getchar();while(col!='R'&&col!='B');
if(col=='R')r[++R]=(point){sin(v)*_x-cos(v)*_y,sin(v)*_y-cos(v)*_x};
else b[++B]=(point){sin(v)*_x-cos(v)*_y,sin(v)*_y-cos(v)*_x};
}
std::sort(r+1,r+R+1);
std::sort(b+1,b+B+1);
if(!B)return printf("%d\n",n),0;
int ans=0;
double kk,bb,dist,dist_up,dist_dn;
int upans,dnans;
for(int i=1;i<=B;++i)
for(int j=1;j<=R;++j){
kk=1.0*(b[i].y-r[j].y)/(b[i].x-r[j].x),bb=b[i].y-kk*b[i].x;
dist_up=1e18,dist_dn=1e18;
for(int k=1;k<=B;++k)
if(k!=i){
dist=kk*b[k].x+bb-b[k].y;
if(dist<0){
if(-dist<dist_up)dist_up=-dist;
}else{
if(dist<dist_dn)dist_dn=dist;
}
}
upans=1,dnans=1;
for(int k=1;k<=R;++k)
if(k!=j){
dist=kk*r[k].x+bb-r[k].y;
if(dist<0){
if(-dist<=dist_up+1e-7)++upans;
}else{
if(dist<=dist_dn+1e-7)++dnans;
}
}
ans=std::max(ans,std::max(upans,dnans));
}
printf("%d\n",ans);
return 0;
}
P4385 [COCI2009]Dvapravca的更多相关文章
- luogu P4385 [COCI2009]Dvapravca
传送门 我真的弱,正解都不会还打了个错的暴力 考虑平行线与x轴平行,那么可以按照y为第一关键字升序,x为第二关键字升序排序,然后合法的一段红点就是连续的一段,答案也就是最大的连续红色段 推广到一般情况 ...
- [洛谷P4385][COCI2009]Dvapravca(咕咕咕)
题目大意:很早以前做的题 题解: 卡点: C++ Code: #pragma GCC optimize("Ofast") #pragma GCC optimize("un ...
- [COCI2009]Dvapravca 计算几何
[COCI2009]Dvapravca LG传送门 先给出考场上的\(O(n^3)\)乱搞方法:枚举一个蓝点和一个红点,找出过着两个点的直线,再枚举蓝点找出这条直线最多能往两边扩展多宽,最后枚举红点计 ...
- bzoj3086: Coci2009 dvapravca
Description 给定平面上的 N 个点, 其中有一些是红的, 其他是蓝的.现在让你找两条平行的直线, 使得在保证 不存在一个蓝色的点 被夹在两条平行线之间,不经过任何一个点, 不管是蓝色 ...
- 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 ...
随机推荐
- Android aapt 工具介绍(转)
目录 AAPT 工具介绍 AAPT 的帮助信息 查看AAPT的版本 使用AAPT列出资源包apk文件列表 使用AAPT打包资源文件 使用AAPT解压资源包apk 来自:http://mmmyddd ...
- 控制台输出 mybatis 中的sql语句
控制台输出 mybatis 中的sql语句 在 log4j.xml 文件中 增加如下配置 <!-- mybatis 输出的sql,DEBUG级别 --> <logger name=& ...
- 清空数据库错误:因为该表正由 FOREIGN KEY 约束引用 解决办法
如下解决了五个问题 1. 清空数据 2. 有外键也可以, 因为是逆向删除, 从最后一张表删除. 且使用的是delete, 因为truncate不能对有外键的表 3. 种子问题, 如果表存在种子重设为0 ...
- DELL MD3200i存储控制器解锁方法
DELL MD3200i存储控制器解锁方法 现有一台DELL MD3200i存储,因种种原因导致控制器被锁定,这里是刚出厂的一台存储,出现这个问题让我们都很困惑,只能怀疑DELL公司的问题. 这台存储 ...
- 51nod 1625 夹克爷发红包
题目链接戳这里 题意是有一个赋有非负数的矩阵,每次可以将某一行or某一列替换成某个数值,可以替换<=k次,问如何替换能使得矩阵总和最大,输出最大值. 一开始想的是简单的贪心:比如找当前收益最大的 ...
- 获取QQ头像接口
https://q4.qlogo.cn/g?b=qq&nk=QQ号码&s=140
- PHP 使用 jwt 方式用户身份认证
封装类 // +---------------------------------------------------------------------- // | Created by PhpSt ...
- Kafka学习之路 (四)Kafka的安装
一.下载 下载地址: http://kafka.apache.org/downloads.html http://mirrors.hust.edu.cn/apache/ 二.安装前提(zookeepe ...
- Jmeter核心-hc课堂笔记
自动化测试平台-Httprunner-接口.UI.协议. 平台语言-JAVA-UI-Selenium(java版的).Appium(java版的).接口-Httpclient.Jmeter.(Jmet ...
- apache,R,P,url重写,伪静态,反向代理
需求: 1,浏览器地址栏中URL不变 2,伪静态重写生效 ===================== <VirtualHost *> ServerName xinwen.888.com.c ...