[洛谷P4385][COCI2009]Dvapravca(咕咕咕)
题目大意:很早以前做的题
题解:
卡点:
C++ Code:
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include <algorithm>
#include <random>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#define maxn 1010
#define long
const long double eps = 1e-8;
inline long double abs(long double x) { return x < 0 ? -x : x; } struct Point {
int x, y;
bool isR;
long double b;
Point() { }
Point(int __x, int __y, bool __isR) : x(__x), y(__y), isR(__isR), b(__x) { }
inline bool operator == (const Point &rhs) const {
return abs(b - rhs.b) < eps;
}
} P[maxn];
inline long double slope(const Point &lhs, const Point &rhs) {
return (lhs.y - rhs.y) / static_cast<long double> (lhs.x - rhs.x);
}
inline bool cmp(int a, int b) { return P[a].b < P[b].b; }
inline int sign(long double x) { return x < -eps ? -1 : x > eps; } std::mt19937 rd(time(0));
int n, totR, totB;
int R[maxn], B[maxn], rnk[maxn];
int ans; void calc() {
std::sort(rnk + 1, rnk + n + 1, cmp);
for (int l = 1, r, cnt[2], res = 0; l <= n; l = r) {
r = l;
cnt[0] = cnt[1] = 0;
while (r <= n && P[rnk[l]] == P[rnk[r]])
++cnt[P[rnk[r]].isR], ++r;
res += cnt[1];
ans = std::max(ans, res);
if (cnt[0]) res = cnt[1];
}
}
void solve() {
int __B = rd() % totB, __R = rd() % totR;
Point _R = P[R[__R]], _B = P[B[__B]];
if (_R.x == _B.x) return ;
const long double k = slope(_R, _B), b = _R.y - _R.x * k;
for (register int i = 1; i <= n; ++i) P[i].b = P[i].y - P[i].x * k;
long double min = 1e20, max = -1e20;
for (int *i = B; i != B + totB; ++i) {
int __s = sign(P[*i].b - b);
if (__s) {
if (__s == 1) min = std::min(min, P[*i].b);
else max = std::max(max, P[*i].b);
}
}
int resm = 1, resM = 1;
for (int *i = R; i != R + totR; ++i) {
int __s = sign(P[*i].b - b);
if (__s) {
if (__s == 1) resM += (P[*i].b <= min + eps);
else resm += (P[*i].b >= max - eps);
}
}
ans = std::max(ans, std::max(resm, resM));
} int main() {
scanf("%d", &n);
for (int i = 1, x, y; i <= n; ++i) {
static char ch;
scanf("%d%d%1s", &x, &y, &ch);
P[i] = Point(x, y, ch == 'R');
rnk[i] = i;
if (ch == 'R') R[totR++] = i;
else B[totB++] = i;
}
if (totB == 0 || totR == 0) {
printf("%d\n", totR);
return 0;
}
calc();
while (true) {
for(int i = 1; i <= 10; ++i) solve();
if (clock() / static_cast<double> (CLOCKS_PER_SEC) > 0.998) break;
}
printf("%d\n", ans);
return 0;
}
[洛谷P4385][COCI2009]Dvapravca(咕咕咕)的更多相关文章
- luogu P4385 [COCI2009]Dvapravca
传送门 我真的弱,正解都不会还打了个错的暴力 考虑平行线与x轴平行,那么可以按照y为第一关键字升序,x为第二关键字升序排序,然后合法的一段红点就是连续的一段,答案也就是最大的连续红色段 推广到一般情况 ...
- P4385 [COCI2009]Dvapravca
首先特判掉蓝点数量\(<2\)的情况.没有蓝点答案就是\(n\),有一个蓝点可以枚举一个红点,选择过这个蓝点和红点的一条线和在无穷远处的平行线(即这条线对应的两个半平面). 这里认为过一个点是与 ...
- 「P4996」「洛谷11月月赛」 咕咕咕(数论
题目描述 小 F 是一个能鸽善鹉的同学,他经常把事情拖到最后一天才去做,导致他的某些日子总是非常匆忙. 比如,时间回溯到了 2018 年 11 月 3 日.小 F 望着自己的任务清单: 看 iG 夺冠 ...
- (转)S5pv210 HDMI 接口在 Linux 3.0.8 驱动框架解析 (By liukun321 咕唧咕唧)
作者:liukun321 咕唧咕唧 日期:2014.1.18 转载请标明作者.出处:http://blog.csdn.net/liukun321/article/details/18452663 本文 ...
- u-boot for tiny210 ver1.0(by liukun321咕唧咕唧)
新版本下载: 下面的链接提供了较新版本的源码 ver4.0源码下载:u-boot for tiny210 ver4.0 ver3.1源码下载: u-boot for tiny210 ver3.1 v ...
- Lightning Conductor 洛谷P3515 决策单调性优化DP
遇见的第一道决策单调性优化DP,虽然看了题解,但是新技能√,很开森. 先%FlashHu大佬,反正我是看了他的题解和精美的配图才明白的,%%%巨佬. 废话不多说,看题: 题目大意 已知一个长度为n的序 ...
- 洛谷P1337 【[JSOI2004]平衡点 / 吊打XXX】(模拟退火)
洛谷题目传送门 很可惜,充满Mo力的Mo拟退火并不是正解.不过这是一道最适合开始入手Mo拟退火的好题. 对模拟退火还不是很清楚的可以看一下 这道题还真和能量有点关系.达到平衡稳态的时候,物体的总能量应 ...
- 【LGR-054】洛谷10月月赛II
[LGR-054]洛谷10月月赛II luogu 成功咕掉Codeforces Round #517的后果就是,我\(\mbox{T4}\)依旧没有写出来.\(\mbox{GG}\) . 浏览器 \( ...
- 洛谷P3195||bzoj1010 [HNOI2008]玩具装箱TOY
洛谷P3195 bzoj1010 设s数组为C的前缀和 首先$ans_i=min_{j<i}\{ans_j+(i-j-1+s_i-s_j-L)^2\}$ (斜率优化dp)参考(复读)https: ...
随机推荐
- lg4820 书堆
题目链接 题意概述:n本书,在桌子边缘堆放,求最长长度. 首先……我们需要一点初中物理知识来推一下规律. 下图是一本书的情况,一本书时书伸出1/2处于临界状态,显然. 两本书时,把两本书看作整体,则有 ...
- LCA的多种求法(超详细!!!)
倍增求LCA (1)树上倍增法 预处理 设f[x,k]表示x的2^k辈祖先,即从x向根节点走2^k步到达的节点.特别地,若该节点不存在,则令f[x,k]=0.f[x,0]就是x的父节点.可以得出f[x ...
- c语言用指针定义一个类型进行输入输出
1 整型数组 // #include "stdafx.h" #include "stdlib.h" int _tmain(int argc, _TCHAR* a ...
- python之turtle使用:画一颗美美哒的树
关于工具介绍这里小生就不赘述了,这里附上个人觉得最详细的文档地址:https://docs.python.org/zh-cn/3/library/turtle.html?highlight=turtl ...
- Java对姓名, 手机号, 身份证号, 地址进行脱敏
替换几位就用几个*号 一.姓名 1, 脱敏规则: 只显示第一个汉字,比如李某某置换为李**, 李某置换为李* private static String desensitizedName(String ...
- VUE 动态加载组件的四种方式
动态加载组件的四种方式: 1.使用import导入组件,可以获取到组件 var name = 'system'; var myComponent =() => import('../compon ...
- php 对接微信接口 {"errcode":41001,"errmsg":"access_token missing hint
这里是针对所有token微信都有这种机制 1.token被多次访问无效 访问微信接口->得到token,缓存起来2小时内有效,期间2小时内每次都取缓存即可,不必每次都去微信那边兑换 问题:缓存期 ...
- Tensorflows安装(cpu版最简安装方法)
一.说明 首先声明,本人系统是Windows10 64位,Win7未试. 本文旨在帮助园友以更简单的方式安装Tensorflow,下面介绍的是如何安装Python的Tensorflow cpu版本. ...
- PostgreSQL DISTINCT 和 DISTINCT ON
select语句中,使用distinct关键字,在处理select list后,结果表可以选择消除重复的行.在SELECT之后直接写入DISTINCT关键字以指定此关键字: SELECT DISTIN ...
- Python3基础 内置函数 dir 查询对象的方法列表
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...