「清新题精讲」CF249D - Donkey and Stars

2024-05-29 22:44

本文主要是介绍「清新题精讲」CF249D - Donkey and Stars,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

更好的阅读体验

CF249D - Donkey and Stars

Description

给定 n n n 个点 ( x i , y i ) (x_i,y_i) (xi,yi) a , b , c , d a,b,c,d a,b,c,d,求出最多有多少个点依次连接而成的折线上线段的斜率在 ( a b , c d ) (\frac{a}{b},\frac{c}{d}) (ba,dc),其中第 1 1 1 条折线的起点必须在坐标原点且坐标原点不计入答案。

1 ≤ n ≤ 1 0 5 , 0 ≤ a , b , c , d ≤ 1 0 5 , 1 ≤ x i , y i ≤ 1 0 5 1\le n\le 10^5,0\le a,b,c,d\le 10^5,1\le x_i,y_i\le 10^5 1n105,0a,b,c,d105,1xi,yi105

Solution

不难想到通过 DP 来求解,暴力 DP 时间复杂度为 O ( n 2 ) O(n^2) O(n2),必然是过不去的。所以,考虑对于点 i i i,能够与 i i i 连线的点 j j j 应满足哪些性质?

i i i 点位于 j j j 点的右上方,则有 a b < y i − y j x i − x j < c d \frac{a}{b}< \frac{y_i-y_j}{x_i-x_j}<\frac{c}{d} ba<xixjyiyj<dc,通过简单的解不等式可以得到 b y j − a x j < b y i − a x i by_j-ax_j<by_i-ax_i byjaxj<byiaxi 以及 d y i − c x i < d y j − c x j dy_i-cx_i<dy_j-cx_j dyicxi<dyjcxj,满足该条件的即可转移。注意到,这其实就是二维偏序,所以只需要令数组按 b y i − a x i by_i-ax_i byiaxi 排序,求最长下降子序列。不过,该题要求必须从原点开始,考虑从后往前枚举,这样相当于求最长上升子序列,最后输出在原点结束的最长长度即可(不要忘记 − 1 -1 1)。

综上所述,可以做到 O ( n log ⁡ n ) O(n\log n) O(nlogn)

Code

#include <bits/stdc++.h>
#define fi first
#define se second
#define int long longusing namespace std;typedef pair<int, int> PII;
typedef long long LL;const int N = 1e5 + 10;int n, a, b, c, d;
PII pnt[N];
int f[N];
std::vector<int> dct;
struct fenwick {int tr[N];void add(int x, int d) { for (int i = x; i < N; i += (i & -i)) tr[i] = max(tr[i], d); }int sum(int x) {int res = 0;if (!x) return res;for (int i = x; i; i -= (i & -i)) res = max(res, tr[i]);return res;}
}cnt;int find(int x) {return lower_bound(dct.begin(), dct.end(), x) - dct.begin() + 1;
}signed main() {scanf("%lld\n%lld/%lld %lld/%lld", &n, &a, &b, &c, &d);for (int i = 1; i <= n; i ++)scanf("%lld%lld", &pnt[i].fi, &pnt[i].se), dct.push_back(d * pnt[i].se - c * pnt[i].fi);pnt[0] = {0, 0};sort(dct.begin(), dct.end());dct.erase(unique(dct.begin(), dct.end()), dct.end());sort(pnt, pnt + 1 + n, [&](PII tmp1, PII tmp2) {return tmp1.se * b - tmp1.fi * a < tmp2.se * b - tmp2.fi * a;});for (int i = n, j = n; i >= 0; i --) {while (j > i && pnt[j].se * b - pnt[j].fi * a != pnt[i].se * b - pnt[i].fi * a)cnt.add(find(pnt[j].se * d - pnt[j].fi * c), f[j]), j --;f[i] = cnt.sum(find(pnt[i].se * d - pnt[i].fi * c) - 1) + 1;}for (int i = 0; i <= n; i ++)if (pnt[i] == make_pair(0ll, 0ll)) {cout << f[i] - 1 << endl;return 0;}return 0;}

这篇关于「清新题精讲」CF249D - Donkey and Stars的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1014838

相关文章

MATLAB算法实战应用案例精讲-【数模应用】三因素方差

目录 算法原理 SPSSAU 三因素方差案例 1、背景 2、理论 3、操作 4、SPSSAU输出结果 5、文字分析 6、剖析 疑难解惑 均方平方和类型? 事后多重比较的类型选择说明? 事后多重比较与‘单独进行事后多重比较’结果不一致? 简单效应是指什么? 边际估计均值EMMEANS是什么? 简单简单效应? 关于方差分析时的效应量? SPSSAU-案例 一、案例

MATLAB基础应用精讲-【数模应用】多因素方差分析(附MATLAB、R语言和python代码实现)

目录 前言 几个高频面试题目 单因素与多因素方差分析对比 单因素方差分析 多因素方差分析 模型结构 几个相关概念 算法原理 多因素方差分析基本思想 多因素方差分析的其他功能 多因素方差分析的进一步分析 多因素方差分析的理论假设 多因素方差分析的基本步骤  数学模型 总变差公式 多因素方差检验 关键因素完整性检验 固定效应与随机效应 饱和模型与非饱和模型 因素

MATLAB算法实战应用案例精讲-【数模应用】协方差分析

目录 前言 算法原理 什么是协方差 协方差分析的基本思想 协方差分析的理论假设 协方差分析的数学模型 协方差分析的基本假定  ​编辑 协方差分析的步骤 算法步骤 SPSSAU 协方差分析 1、背景 2、理论 3、操作 4、SPSSAU输出结果 5、文字分析 6、剖析 疑难解惑 均方平方和类型? 事后多重比较的类型选择说明? 事后多重比较与‘单独进行事后多重

数据结构-十大排序算法集合(四万字精讲集合)

前言 1,数据结构排序篇章是一个大的工程,这里是一个总结篇章,配备动图和过程详解,从难到易逐步解析。 2,这里我们详细分析几个具备教学意义和实际使用意义的排序: 冒泡排序,选择排序,插入排序,希尔排序,快排(递归,霍尔版本),快排(递归,前后指针版本),快排(非递归版本),堆排序(解决top_k问题),归并排序(递归),归并排序(非递归),计数排序 3,这里我想说一下,学习排序之前需

MATLAB算法实战应用案例精讲-【数模应用】偏相关分析(附MATLAB、python和R语言代码实现)

目录 前言 知识储备 相关性分析 一、实际应用 二、理论思想 三、操作过程 四、结果分析 算法原理 什么是偏相关 数学模型 (一) 偏相关系数r (二) 假设检验 偏相关分析过程  偏相关分析的SPSS实现 SPSS、EXCLE实现偏相关分析 STATA SPSSPRO 1、作用 2、输入输出描述 3、案例示例 4、案例数据 5、案例操作 6、输出结果

DearLicy主题 | 小众化小清新风格的博客主题源码 | Typecho主题模版

DearLicy主题,一款小众化小清新风格的博客主题 主题支持Typecho所支持的所有版本PHP 简约、小众、优雅 安装教程 1.将主题上传至/usr/themes/文件夹下解压 2.后台进行启用 3.访问前台查看效果 源码下载:https://download.csdn.net/download/m0_66047725/89386417 更多资源下载:关注我。

HDU1541 Stars【树状数组】

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1541 题目大意: 按顺序给你N颗星星的坐标,y是从小到大给出的。每个星星有一个等级,该等级为它左下角的星星 的个数。求每个等级的点有多少个。 思路: 因为y是从小到大给出的,那么可以直接忽略y,只记录x,求出(x,y)左边有多少个点就可以了。 用Ans[]数组表示每个等级

[DDR5 Jedec] 读操作 Read Command 精讲

依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解DDR》 Read 读取命令也可以视为列读取命令。当与正确的bank地址和列地址结合使用时,通过激活命令(行访问)移动到检测放大器中的数据, 现在被推送到数据总线上。 DRAM 通常包括一个“读取和自动预充电”命令,该命令执行列读取,然后关闭/预充电行。这样,就不需要发出单独的预充电命令。如果需要访问同一行,但需要访问不同的列,则根

Go变量作用域精讲及代码实战

1. 变量的作用域概述 在编程中,变量的作用域(Scope)定义了变量在程序中的可见性和生命周期。理解变量的作用域对于编写健壮且可维护的代码至关重要。Go语言(简称Go)提供了几种不同的作用域类型,使得开发者可以灵活地控制变量的可见范围和生命周期。本章节将详细概述Go语言中变量的各种作用域,帮助读者更好地理解和应用这些概念。 1.1 作用域的类型 在Go语言中,主要有以下几种作用

视觉SLAM14精讲——相机与图像3.2

视觉SLAM14精讲 三维空间刚体运动1.0三维空间刚体运动1.1三维空间刚体运动1.2李群与李代数2.1相机与图像3.1 视觉SLAM14精讲——相机与图像3.2 视觉SLAM14精讲畸变有关重投影误差缩放实际使用 畸变 相机畸变是相机镜头光学缺陷所致的缺陷, 在光学领域这种问题是没办法百分百被消除的。在标定过程中,通过对棋盘格角点的识别,从而计算得到畸变参数,这些畸