hdu 6127 Hard challenge

2023-11-03

Problem

acm.hdu.edu.cn/showproblem.php?pid=6127

Meaning

平面上有 n 个不重合的点,任意三点不共线,任意两点所在直线不经原点。
每个点有个 value,任意两个点连出的线段的 value 是该两点 value 的乘积。
现从原点引出一条直线,要不经过任意给出的点,每穿过一条线段,就得到这条线段的 value。问能取得的最大的 value。

Analysis

对所有的点按角度排序(极角排序,或按斜率排),n 个点被直线分隔在两个半平面内,记其中一半的总 value 为 L,另一半的为 R,则候选解为 L * R。
枚举直线的斜率,每扫过一个点,就把它从原来的那一半中去除,而加到另一半中,更新答案。
(我是用斜率排序,枚举斜率时只枚举 180 ,用了一个特殊点判断扫描结束。去掉这个判断也能过)

Code

#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 50000;

struct point
{
    long long x, y, v;
    // 按斜率升序排
    bool operator < (const point &rhs) const
    {
        // 如果点在 y 轴左边
        // 要临时把它关于原点对称到 y 轴右边
        long long ax = x, ay = y, bx = rhs.x, by = rhs.y;

        if(x < 0)
            ax = -x, ay = -y;

        if(rhs.x < 0)
            bx = -rhs.x, by = -rhs.y;

        return ay * bx < by * ax;
    }
} p[N], terminal;

int main()
{
    // terminal 是一个在 y 轴正半轴上的点
    terminal.x = 0;
    terminal.y = 1;
    int T;
    scanf("%d", &T);
    while(T--)
    {
        int n;
        scanf("%d", &n);
        for(int i = 0; i < n; ++i)
            scanf("%I64d%I64d%I64d", &p[i].x, &p[i].y, &p[i].v);
        sort(p, p + n);

        long long L = 0, R = 0;
        // 初始时按 y 轴来分点
        // y 轴左边的算入 L
        // y 轴右边的算入 R
        // y 轴上的,正半轴算 L,负半轴算 R(因为逆时针扫)
        for(int i = 0; i < n; ++i)
            if(p[i].x < 0)
                L += p[i].v;
            else if(p[i].x > 0)
                R += p[i].v;
            else if(p[i].y > 0)
                L += p[i].v;
            else
                R += p[i].v;

        long long ans = L * R;
        // 枚举扫过的点
        for(int i = 0; i < n; ++i)
        {
            if(p[i].x < 0)
            {
                L -= p[i].v;
                R += p[i].v;
            }
            else if(p[i].x > 0)
            {
                L += p[i].v;
                R -= p[i].v;
            }
            else if(p[i].y > 0)
            {
                L -= p[i].v;
                R += p[i].v;
            }
            else
            {
                L += p[i].v;
                R -= p[i].v;
            }
            ans = max(ans, L * R);
            // 如果超过了 terminal 点
            // 则扫描结束
            // (去掉也能过)
            if(terminal < p[i])
                break;
            else if(!(p[i] < terminal))
                break;
        }
        printf("%I64d\n", ans);
    }
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hdu 6127 Hard challenge 的相关文章

  • C++ 维护子类对象的混合集合

    如果我在这里错过了一个相当基本的概念 我很抱歉 但我正在尝试弄清楚如何维护多个类类型的集合 所有类类型都派生自同一个父类 并且在检索它们时仍然可以访问它们的特定于子类的方法从集合中 作为上下文 我有一个基类 BaseClass 和许多类 例
  • 如何从 C# 中的 dataTable.Select( ) 查询中删除单引号?

    所以我有一个经销商名称列表 我正在我的数据表中搜索它们 问题是 一些傻瓜必须被命名为 Young s 这会导致错误 drs dtDealers Select DealerName dealerName 所以我尝试替换字符串 尽管它对我不起作
  • C++ 是否可以在 MacOS 上与 OpenMP 和 boost 兼容?

    我现在已经尝试了很多事情并得出了一些结论 也许 我监督了一些事情 但似乎我无法完成我想要的事情 问题是 是否有可能使用 OpenMP 和 boost 在 MacOS High Sierra 上编译 C 一些发现 如果我错了请纠正我 Open
  • 为什么在 WebApi 上下文中在 using 块中使用 HttpClient 是错误的?

    那么 问题是为什么在 using 块中使用 HttpClient 是错误的 但在 WebApi 上下文中呢 我一直在读这篇文章不要阻止异步代码 https blog stephencleary com 2012 07 dont block
  • 当一组凭据下的计划任务启动的进程在另一组凭据下运行另一个程序时,Windows 是否有限制

    所以我有一个简单的例子 其中我有应用程序 A 它对用户 X 本地管理员 有一些硬编码的凭据 然后它使用硬编码的绝对路径启动带有这些凭据的应用程序 B A 和 B 以及 dotnet 控制台应用程序 但是它们不与控制台交互 只是将信息写入文件
  • 从同一个类中的另一个构造函数调用构造函数

    我有一个带有两个构造函数的类 C 这是代码片段 public class FooBar public FooBar string s constructor 1 some functionality public FooBar int i
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • C# 数据表更新多行

    我如何使用数据表进行多次更新 我找到了这个更新 1 行 http support microsoft com kb 307587 my code public void ExportCSV string SQLSyntax string L
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • C# 存档中的文件列表

    我正在创建一个 FileFinder 类 您可以在其中进行如下搜索 var fileFinder new FileFinder new string C MyFolder1 C MyFolder2 new string
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 启动时的 Excel 加载项

    我正在使用 Visual C 创建 Microsoft Excel 的加载项 当我第一次创建解决方案时 它包含一个名为 ThisAddIn Startup 的函数 我在这个函数中添加了以下代码 private void ThisAddIn
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • 打印大型 WPF 用户控件

    我有一个巨大的数据 我想使用 WPF 打印 我发现WPF提供了一个PrintDialog PrintVisual用于打印派生的任何 WPF 控件的方法Visual class PrintVisual只会打印一页 因此我需要缩放控件以适合页面
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 在 Windows Phone silverlight 8.1 上接收 WNS 推送通知

    我有 Windows Phone 8 1 silverlight 应用程序 我想使用新框架 WNS 接收通知 我在 package appxmanifest 中有
  • 可访问性不一致:参数类型的可访问性低于方法

    我试图在两个表单之间传递一个对象 基本上是对当前登录用户的引用 目前 我在登录表单中有一些类似的内容 private ACTInterface oActInterface public void button1 Click object s
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • 我可以在“字节数”设置为零的情况下调用 memcpy() 和 memmove() 吗?

    当我实际上没有什么可以移动 复制的时候 我是否需要处理这些情况memmove memcpy 作为边缘情况 int numberOfBytes if numberOfBytes 0 memmove dest source numberOfBy

随机推荐

  • JavaScript——插入排序、堆排序

    一 插入排序 插入排序是一种简单直观的排序算法 它比冒泡排序 选择排序都更有效率 基本思路 插入排序的工作原理是通过构建有序序列 对于未排序元素 在已排序序列中从后向前扫描 找到对应的位置并插入 插入排序将数组分成 已排序 和 未排序 两部
  • 华为OD机试--路灯覆盖问题

    一条笔直的公路上安装了N个路灯 从位置0开始安装 路灯之间的距离是100m 每个路灯都有自己的照明半径 请计算第一个路灯和最后一个路灯之间 未照明区间的长度和 输入描述 第一行为一个数N 表示灯的个数 1 100000 第二行为N个空格分隔
  • 请问如何用nodejs通过post发送multipart/form-data类型的http请求?

    请问如何用nodejs通过post发送multipart form data类型的http请求 发布于 4 年前 作者 xuhaijinsky2008 24777 次浏览 请问如果用nodejs通过post发送multipart form
  • Selenium成长之路-11简单对象定位之XPATH方法

    XPath是一种在HTML文档中定位元素的语言 因为 HTML 可以看做 XML 的一种实现 所以 selenium 用 户可是使用这种强大语言在 web 应用中定位元素 XPath基于XML的树状结构 提供在数据结构树中找寻节点的能力 X
  • static的用法

    1 static修饰普通变量 static修饰全局变量 1 作用域 改变链接属性 只在本文件有效 即使extern外部声明也不行 其他文件可定义相同名字的变量 2 初始化 只能被初始化一次 如果是整型不初始化就会自动赋值为0 字符型初始化为
  • 【Spring】aop的底层原理

    欢迎来到 边境矢梦 的csdn博文 本文主要梳理 Spring 中的切面编程aop的底层原理和重点注意的地方 我是边境矢梦 一个正在为秋招和算法竞赛做准备的学生 喜欢的朋友可以关注一下 下次更新不迷路 Ps 月亮越亮说明知识点越重要 重要性
  • 群晖nas怎么上传整个文件夹_处理群晖NAS中的烦人@eaDir文件夹

    今天发现NAS文件夹里面有很多 eaDir文件夹 和Mac OS X里的 DS Store类似 很烦人 找了解决方法 0 0 ssh登录群晖 控制面板里面打开SSH 0 1 Windows或者Mac 用 ssh 用户名 NAS IP地址登录
  • 1.进程与线程

    Java多线程文章目录 目录 1 进程与线程 Java程序启动至少会有两个线程启动 2 创建Java线程三种方式 run 与start 区别 第一种 继承Thread类 第二种 实现Runnable接口 两种方式区别 练习项目 第三种 实现
  • 通俗理解条件概率、条件期望、条件方差

    写在前面 求 条件XX 时 对 条件 的理解可以是 把 XX条件 作为新的基本事件空间 总体看待 而忽略除这个条件以外的 类似于用摄像机照相时 一开始是整个画面 当得到 XX条件 的约束后 镜头聚焦 画面缩小至代表那个条件的小空间上 一 条
  • Python-爬虫(期末报告)

    爬取的是房价网的数据 然后进行展示 初学爬虫 和同组的小伙伴 其实一个组就俩人 一起写的 我写的爬取 只用了正则表达式拿到网页源码里我想要的数据 还有个AJAX请求直接抓取相应对象然后拿到其中有用的数据即可 注释没写完 另一个小伙伴拿我爬取
  • Fully Convolutional Adaptation Networks for Semantic Segmentation

    参考 论文解析之 Fully Convolutional Adaptation Networks for Semantic Segmentation 云 社区 腾讯云 论文网址 Fully Convolutional Adaptation
  • C语言二维数组作为函数参数

    设有整型二维数组a 3 4 如下 0 1 2 34 5 6 78 9 10 11 它的定义为 int a 3 4 0 1 2 3 4 5 6 7 8 9 10 11 设数组a的首地址为1000 各下标变量的首地址及其值如图所示 前面介绍过
  • Android sdk 收集信息,采集SDK-Android 报错

    采集SDK Android 报错 small detect model 找不到 这是说明文档 https ai baidu com docs Face Android SDK top 文档里完全没提到这个文件 我想知道这个文件在哪下载 有什
  • QList中的removeAt()

    QList removeAt removeAt后其他元素的索引值会相应的减小 QList
  • 图像生成质量fid、inception score、KID计算

    FID 简介 fid是一个非常常用的评估图像生成质量的指标 图像生成的论文中经常会用到 fid是一种度量两个图片数据集相似度的方法 我们生成的图片与真实图片越相似越好 相似度高对应的是fid值小 安装 想进一步学的的伙伴可以从理论出发 然后
  • 封装自己的SDK

    我们在开发Spring项目时常常会引入各种xxx spring boot starter的依赖包 然后在配置文件中填入必要的信息 就可以使用依赖提供好的容器 这里是在鱼皮新项目直播中学习到的 特此记录一下 可在未来封装自己的SDK进行封装与
  • openswan安装部署

    Lclient gt Lserver Rserver lt Rclient 172 16 10 16 10 86 10 17 10 86 10 18 192 168 10 16 首先要保证 lclient ping通lserver和rser
  • mysql中的mvcc机制

    MVCC全称是 Multi Version ConCurrency Control 即多版本控制协议 MVCC的主要是靠在每行记录上增加隐藏列和使用undo log来实现的 隐藏列主要包括 改行数据创建的版本号 递增的 删除时间 指向und
  • sql手工注入练习拿flag

    sql手工注入练习拿flag 记录一下自己重新开始学习web安全之路 1 找注入点 url 搜索框 登录框 2 找交互点 用单引号判断是否存在交互点 发现回显不正常 说明url存在有交互点 3 判断类型 char类型 利用and 1 1 和
  • hdu 6127 Hard challenge

    Problem acm hdu edu cn showproblem php pid 6127 Meaning 平面上有 n 个不重合的点 任意三点不共线 任意两点所在直线不经原点 每个点有个 value 任意两个点连出的线段的 value