「清新题精讲」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;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/844412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【智能算法】波搜索算法(WSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;H Zhang受到雷达技术启发&#xff0c;提出了波搜索算法&#xff08;Wave Search Algorithm, WSA&#xff09;。 2.算法原理 2.1算法思想 WSA模拟雷达工作时的发射、反…

opencascade 笔记

opencascade 画一个无限大的面 在 OpenCascade 中&#xff0c;要绘制一个无限大的面&#xff0c;你可以使用 gp_Pln 类来定义一个平面&#xff0c;然后将其绘制出来。这里是一个示例代码&#xff0c;演示如何在 OpenCascade 中绘制一个无限大的平面&#xff1a; #include <…

Hudi之数据读写探究

Hudi之数据读写深入探究 1. Hudi数据写入 1-1. 写操作 Hudi数据湖中的数据更新、插入和删除操作&#xff0c;是一个基于Apache Hadoop的库&#xff0c;为数据湖提供了一种有效的方法来处理更新和增量数据&#xff0c;并支持基于时间的快照和增量数据处理。Hudi支持三种主要的…

博物馆三维实景vr展示

VR技术应用到地产行业的优势不言而喻&#xff0c;随着购房政策的进一步放宽&#xff0c;购房刚需者借助VR商铺样板间展示系统看房&#xff0c;远比之前跑楼盘更便捷高效。那么VR商铺全景展示具体有哪些好处呢? VR技术与商铺的结合&#xff0c;为客户带来了前所未有的购房体验。…

Thingsboard规则链:Calculate Delta节点详解

在物联网(IoT)应用中&#xff0c;对设备数据的实时分析和处理是优化运营、预测维护的关键。Thingsboard作为一款功能强大的物联网平台&#xff0c;其规则引擎提供了丰富的节点来处理和分析数据流。其中&#xff0c;Calculate Delta节点是一个重要的工具&#xff0c;用于计算连续…

2024年西安交通大学程序设计校赛(ABCDEFO)

题目链接&#xff1a;https://vjudge.net/contest/630537#overview 文章目录 A题题意思路编程 B题题意思路编程 C题题意思路编程 D题题意思路编程 E题题意思路编程 F题题意思路编程 O题题意思路编程 写在前面&#xff1a;今天的训练赛出的题目偏简单&#xff0c;与XCPC的难度差…

C语言-----指针数组 \ 数组指针

一 指针数组 用来存放指针的数组 int arr[10]; //整型数组 char ch[5]; //字符数组 int * arr[6]; //存放整型指针的数组 char * arr[5]; //存放字符指针的数组 // 指针数组的应用 int main() {int arr1[] { 1,2,3,4,5 };int arr2[] { 2,3,4,5,6 };int arr3[] { 3,4,…

滴滴一季度营收同比增长14.9%至491亿元 经调整EBITA盈利9亿元

【头部财经】5月29日&#xff0c;滴滴在其官网发布2024年一季度业绩报告。一季度滴滴实现总收入491亿元&#xff0c;同比增长14.9%&#xff1b;经调整EBITA&#xff08;非公认会计准则口径&#xff09;盈利9亿元。其中&#xff0c;中国出行一季度实现收入445亿元&#xff0c;同…

第一课、Power BI 集成Python

1&#xff0c;下载安装python Python软件地址&#xff1a;Welcome to Python.org 双击自定义安装指定位置并勾选配置环境变量。 后续一直往下&#xff0c;安装完成。 检验是否成功&#xff0c;在cmd命令窗口下输入python 即可看到版本。 安装 pip install pandas 和 pip…

深入解析 JSONPath:从入门到精通

码到三十五 &#xff1a; 个人主页 在数据处理和交换领域&#xff0c;JSON已经成为了一种广泛使用的数据格式&#xff0c; 如何有效地查询和操作这些数据也变得越来越重要。在这种情况下&#xff0c;JSONPath 应运而生&#xff0c;成为了一种在JSON数据中定位和提取信息的强大工…

nginx学习记录-防盗链

1. 防盗链的概念 防盗链&#xff0c;顾名思义就是防止盗取链接&#xff0c;这里的链接一般是资源链接。 如图所示&#xff0c;我们访问一个网站时&#xff08;比如百度&#xff09;&#xff0c;我们第一个请求会获得一个html页面&#xff0c;页面中包含各种资源链接&#xff0…

产品经理-原型绘制(五)

1. 概念 用线条、图形描绘出的产品框架&#xff0c;也称为线框图&#xff0c;是需求和功能的具体化表现 2. 常用工具 Axure 3. 类别 3.1 草图原型 手绘图稿&#xff0c;修改方便&#xff0c;规划的早期使用 3.2 低保真原型 简单交互&#xff0c;无设计图&#xff0c;无需…

SOLIDWORKS正版软件购买指南

在这个数字化的时代,SOLIDWORKS作为一种卓悦的三维计算机辅助设计&#xff08;CAD&#xff09;工具&#xff0c;赢得了众多设计师和工程领域专家的喜爱。为了帮大家更加快捷方便地掌握这一知名设计工具&#xff0c;本文写了更全面的SOLIDWORKS选购指导&#xff0c;向大家披露选…

【Python】解决Python报错:SyntaxError: invalid character in identifier

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

[Linux系统编程] 静态库与动态库

一.库的概念 库是写好的现有的&#xff0c;成熟的&#xff0c;可以复用的代码。 本质上来说库是一种可执行代码的二进制形式&#xff0c;可以被操作系统载入内存执行。库有两种&#xff1a;静态库&#xff08;.a、.lib&#xff09;和动态库&#xff08;.so、.dll&#xff09;。…

继承--5.29

继承格式&#xff1a; package javatest2;public class people {int age;double workday;public people(int age, double workday) {this.age age;this.workday workday;} }package javatest2;public class student extends people {int studyday;public student(int age, d…

Prompt工程与实践

Prompt工程与实践 一、Prompt与大模型 1.1 大模型的定义 大模型本质上就是一个概率生成模型&#xff0c;该模型的模型参数足够大&#xff0c;并且在训练过程中阅读了非常多的各个领域的语料。这个时候&#xff0c;如果通过一个正确的、有效的指令去引导这个模型&#xff0c;…

【Python Cookbook】S01E03 找到最大最小的N个元素

目录 问题解决方案讨论 问题 如何在一个集合中找到最大或最小的 N 个元素&#xff1f; 解决方案 使用 heapq 模块。 pip install heapqheapq 模块中&#xff0c;有 nlargest() 以及 nsmallest() 两个函数&#xff1a; import heapqnums [1, 8, 23, 2, 7, -4, 8, 18, 42, …

小阿轩yx-Shell编程之正则表达式与文本处理器

小阿轩yx-Shell编程之正则表达式与文本处理器 正则表达式 &#xff08;RegularExpression&#xff0c;RE&#xff09; 正则表达式概述 正则表达式的定义 又称 正规表达式常规表达式 代码中常简写为 regex、regexp 或 RE 正则表达式 使用单个字符串来描述、匹配一系列符…

C++笔试强训day36

目录 1.提取不重复的整数 2.【模板】哈夫曼编码 3.abb 1.提取不重复的整数 链接https://www.nowcoder.com/practice/253986e66d114d378ae8de2e6c4577c1?tpId37&tqId21232&ru/exam/oj 按照题意模拟就行&#xff0c;记得从右往左遍历 #include <iostream> usi…