HDU6127 Hard challenge[计算几何]

PID温控实验平台搭建(二)——PID进阶知识介绍及源码分享 最近,我突发奇想去翻阅了一些我本科期间所做的一些小项目,发现都挺有意思的!希望通过我的讲解文章可以帮助你们少走一些弯路!今天,我要分享的是一个PID温控实验平台的搭建,这是一个系列文章,手把手地教你学习和认识PID算法,了解这种算法在温度控制中的应用。由于我知识有限,如果出现一些错误,希望大家可以帮助我指出来,我们一起学习进步!!! 阅读详情

Hard challenge

  HDU - 6127
 


题意:

给T组数据,每组数据有一个n,代表n个点,接下来n行,每行给出一个x和y还有val,代表每个点的位置和值。两个点连起来的值等于两点的val相乘,不存在两点同时存在于一条与原点相连的线上。问从原点处划一条直线,不与这n个点相交(即点都不能存在于这条直线上),能经过最大的边和是多少。


题解:

实际上,用直线分开两边,得到的和就是等于该线的上方的权值和乘以该线的下方的权值和。

先对这n个点进行极角排序,然后将他们分开4个象限,保存所有点的权值和,根据象限,也保存该象限的前缀和,方便后面的计算。

然后开始从第一象限的点开始扫描到第四象限,每扫描到一个点,同象限在其前面(包括它自身)的权值加起来,用双指针,在其旋转180度的象限中找到一个斜率比该点要大的点,将其与该象限剩下的点的权值加起来,还有将其顺时针90度的象限的所有点的权值也加起来,因为这些地方都是在该线的左侧。

然后枚举出来的该线的答案就是等于  当前的权值*(sum-当前的权值)。将所有点按象限都扫一次,就可以得到最大值了。



#pragma comment(linker, "/STACK:102400000,102400000")
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<algorithm>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<vector>
using namespace std;
typedef long long ll;
const int N=5e4+5;
ll sum[5][N];
vector<int>vc[5];
int nx[]={0,4,1,2,3};
int fan[]={0,3,4,1,2};
struct point
{
    int x,y,val;
    point (int xx=0,int yy=0,int v=0):x(xx),y(yy),val(v){}
}p[N];
ll cross(const point &p1,const point &p2,const point &q1,const point &q2)
{
    return (ll)(q2.y-q1.y)*(p2.x-p1.x)-(ll)(q2.x-q1.x)*(p2.y-p1.y);
}
bool cmp(const point &a,const point &b)
{
    if (!a.y && !b.y && (ll)a.x*b.x<=0)
        return a.x>b.x;
    if (!a.y && a.x>=0 && b.y)
        return 1;
    if (!b.y && b.x>=0 && a.y)
        return 0;
    if ((ll)b.y*a.y<=0)
        return a.y>b.y;
    point one;
    one.y=one.x=0;
    return cross(one,a,one,b)>0 || (!cross(one,a,one,b) && a.x<b.x);
}
bool check(const point &a,const point &b)
{
    point np(-a.x,-a.y);
    return !cmp(np,b);
}
void push(int id,int i,int val)
{
    vc[id].push_back(i);
    sum[id][vc[id].size()]=sum[id][vc[id].size()-1]+val;
}
int main()
{
	int T;
	scanf("%d",&T);
	while (T--)
	{
	    int n;
	    scanf("%d",&n);
	    for (int i=0 ; i<n ; ++i)
            scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].val);
        sort(p,p+n,cmp);
        for (int i=0 ; i<=4 ; ++i)
        {
            vc[i].clear();
            for (int j=0 ; j<=n ; ++j)
                sum[i][j]=0;
        }
        ll s=0;
        for (int i=0 ; i<n ; ++i)
        {
            if (p[i].x>=0 && p[i].y>=0)
                push(1,i,p[i].val);
            else if (p[i].x<0 && p[i].y>=0)
                push(2,i,p[i].val);
            else if (p[i].x<0 && p[i].y<0)
                push(3,i,p[i].val);
            else
                push(4,i,p[i].val);
            s+=p[i].val;
        }
        ll mx=0;
        for (int i=1 ; i<=4 ; ++i)
        {
            if (!vc[i].size())
                continue;
            for (int j=0,k=0 ; j<vc[i].size() ; ++j)
            {
                ll tmp=sum[nx[i]][vc[nx[i]].size()]+sum[i][j+1];
                while (k<vc[fan[i]].size() && check(p[vc[i][j]],p[vc[fan[i]][k]]))
                    ++k;
                tmp+=sum[fan[i]][vc[fan[i]].size()]-sum[fan[i]][k];
                mx=max(tmp*(s-tmp),mx);
            }
        }
        printf("%lld\n",mx);
	}
	return 0;
}
/*
10
4
-5 2 100
-2 -3 100
100000000 1000000000 10
100000000 999999999 9
2
1 1 1
1 -1 1
3
1 1 1
1 -1 10
-1 0 100
4
2 1 10
-4 -1 20
-3 -4 30
-2 -5 40
3
-1 2 10
3 -1 20
1 -5 30
*/

Flutter UI代码生成实战:Cursor与MCP的企业级规范适配 本文探讨了在企业级Flutter项目中,如何通过配置Cursor Rules与定制Figma MCP工具,为AI代码生成设定严格的开发规范。该方法解决了AI生成代码与现有项目架构、命名约定及资源引用规范脱节的核心痛点,实现了从Figma设计稿到高质量、可维护Flutter UI代码的自动化流程,显著提升团队协作效率与代码一致性。 阅读详情

相关推荐

本地如何安装midscene.js运行环境

手把手教你本地安装midscene.js运行环境

实践助梦想成长 2607

HDU - 6127 Hard challenge(尺取法)

题目大意:多组测试数据(t<=5),每组给你平面直角坐标系上的 n 个(1<=n<=5e4)。这n个点两两之间有一条连线,连线值为这两点的值的乘积。现在让你选一条过原点的直线,使得经过直线的线段的值的和最大。

薛崇祥的博客 532

基于STM32F407与AD9910/AD9959的高频可调DDS信号源设计与实战

本文详细介绍了基于STM32F407微控制器与AD9910/AD9959高性能DDS芯片的高频可调信号源设计与实现。文章从DDS原理入手,阐述了双芯片方案的优势,并重点分享了高频电路设计中的电源、PCB布局布线等关键硬件设计技巧与避坑指南。同时,提供了通过SPI配置DDS芯片及利用Matlab生成任意波形的软件驱动方法,旨在帮助开发者打造一个覆盖10Hz至4200MHz的实用信号发生器。

weixin_36184718的博客 120

HDU--1859--计算几何--思维

给定一系列2维平面点的坐标(x, y),其中x和y均为整数,要求用一个最小的长方形框将所有点框在内。长方形框的边分别平行于x和y坐标轴,点落在边上也算是被框在内。 Input 测试输入包含若干测试用例,每个测试用例由一系列坐标组成,每对坐标占一行,其中|x|和|y|小于 231;一对0 坐标标志着一个测试用例的结束。注意(0, 0)不作为任何一个测试用例里面的点。一个没有点的测试用例标志着整个...

queque_heiya的博客 255

5G R18标准:AI/ML如何重塑空口优化与网络架构

人工智能与机器学习正逐步成为通信网络优化的核心技术。其核心原理在于通过数据驱动模型,从海量网络数据中学习信道变化、用户行为等统计规律,替代传统的基于固定规则的优化方法。这一技术范式能显著提升网络性能与效率,尤其在空口资源管理、干扰协调和能耗控制等场景中价值突出。在5G Advanced(R18)标准化框架下,AI/ML被系统性地引入空口设计,聚焦于信道状态信息反馈增强、波束管理与预测等关键用例。通过定义网络侧AI、终端侧AI及联合学习的标准化接口与流程,R18旨在实现跨厂商设备的智能协同,推动无线网络向自适

weixin_35671843的博客 242

使用W5500与外网通信故障解决(MAC地址问题)

在蒲城项目的调试时,AMS500发现一个致命的问题,就是:在局域网跨网段通信时候和中心服务器不能通信,但是在一个HUB下是没有问题的,以前的串口服务器有过类似的问题出现,解决方法说是芯片的问题,结果也不了了之,换了芯片正常。 我们的网络通信芯片选择W5500,其中的MAC地址采用的是CPU的序列号作为Mac地址的问题就出在这,我们在使用的时候MAC地址的第一个必须是偶数,我们忽视了。 现象描...

zxm8513优快云博客 7753

杭电多校第五次 HDU 6354(计算几何)

两端的弧长可以通过公式 求出。现在我们则需要求出两个圆心角即可。而我们发现,两个圆心角分别可以用余弦公式求出,其中大圆的圆心角的一半的余弦为,每个小圆的圆心角的余弦的一半为,继而我们即可将问题转化为一个解三角形的问题。 #include &amp;amp;lt;bits/stdc++.h&amp;amp;gt; #define maxn 100005 using namespace std; const double eps...

城南的花 337

【网络】叶脊(Spine-Leaf)网络拓扑下全三层网络设计与实践(二) - 网络规划

2. 全三层架构设计思路 采用全三层网络架构设计的出发点是: 使用尽量少的交换机高级功能,可以尽可能减少由于功能bug故障造成的问题; 使用尽量少的网络协议,以兼容不通厂商的网络设备 实现简单,易于维护,绝对可靠的路由协议; 通过控制路由来调度流量,尽量减少设备或协议的故障域; 牺牲高级功能带来的便捷,得到更高的可用性和性能; 由上述原则,本文的设计选择只使用静态路由和BGP...

因吹斯汀 1万+

HDU-7112 计算几何

题目大意: 已知一个凸包的前提下,每次查询给出一个三角形,求平面内可以和三角形内的点构成射线穿过凸包但构成线段不穿过凸包的点的面积。 解题思路: (因为官方思路更加清晰,所以这里借用官方的思路) AC代码: #include <bits/stdc++.h> #define ft first #define sd second #define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) #define seteps(N) fi

trouble_的博客 279

100天精通Python(基础篇)——第1天:Python从起源到应用的全面解析(附上Python、PyCharm、VSCode下载安装详细教程)

100天精通Python(基础篇)——第1天:Python从起源到应用的全面解析(附上Python、PyCharm、VSCode下载安装详细教程)

努力让自己发光,对的人才能迎着光而来 101万+

4.6 知识库使用指南:如何让AI Agent拥有专业知识

本文介绍了如何为AI Agent构建和使用知识库。知识库的作用是为Agent提供专业知识,包含文档、数据和规则,可用于专业问答和知识检索。使用方法包括创建知识库(上传文档)、向量化处理、知识检索以及在Agent中的应用。核心要点是理解知识库的价值和使用流程。文章还提出了构建方法、检索优化和应用实践等思考题,建议准备高质量数据、优化检索效果并持续更新知识库。下节将介绍用LangGraph构建复杂AI应用。

yonggeit的博客 3007

HDU 6127 Hard challenge【计算几何】

题目链接 题意:平面上有n个点,每个点有一个value,每两个点之间都有一条线,这条线的value是两点的value之积。求过原点一条线,切割的线的value之和最大。 先对这n个点极角排序,然后假设这个直线是从原点指向第一个点的。那么左边的点的value之和记为s1,右边的记为s2,第一个点算在左边,加在s1里。(可以看做指向第一个点右边一点点)然后向左旋转,从这个点离开,就将这个点的值从s

hxh的博客 691

【GEOS-Chem模拟教程第二期上】生物质燃烧排放 GFED4 数据配置

生物质燃烧排放 GFED4 数据配置

WW、forever的博客 1296

(计算几何)HDU 6127 Hard challenge

HDU 6127 Hard challenge(http://acm.hdu.edu.cn/showproblem.php?pid=6127)题意平面坐标系,给出n个点,保证任意两点的连线不过原点. 每一个点都有一个权值,两点之间的线段的权值等于端点权值之积 问如果过原点做一条直线,直线穿过的线段的权值和最大是多少解决这道题我们卡住了,想到了要用极角排序来做,也想到了去枚举每一个经过原点和点的直

ZhangYang 763

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

hdu 6127 Hard challenge(计算几何)

Hard challenge Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Total Submission(s): 1103    Accepted Submission(s): 457 Problem Description There are 

MR CODER 269

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

HDU 6127-Hard challenge(计算几何)

address: http://acm.hdu.edu.cn/showproblem.php?pid=6127Problem Description There are n points on the plane, and the ith points has a value vali, and its coordinate is (xi,yi). It is guaranteed that no

知足常乐的博客 685

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

HDU 6127 Hard challenge(计算几何)

Description给出二维平面nn个点的坐标(xi,yi)(x_i,y_i)和权值valival_i,保证任意两点不重复且连线不经过原点,经过原点但不经过这nn个点中任一点的直线,定义得分为这条直线两边点点权和的乘积,问最大得分Input第一行一整数TT表示用例组数,每组用例首先输入一整数nn表示点数,之后nn行每行输入三个整数xi,yi,valix_i,y_i,val_i表示点的坐标和权值(1

ZSQ 432

hdu 6127 Hard challenge (计算几何——斜率排序)

题意: 给你几个点的坐标,每个点有一个value值,每两个点之间有一条线段,这条线段的value值是线段的两个端点的value值乘积,题目保证没有过原点的线段, 让你找一条过原点的直线,满足和直线相交的线段的value值之和最大,输出最大和。 思路: 如果画草图的时候画了几个点并且把点两两相连,那么你是很难找到规律的。 应该这样考虑,先画几个点,不连线,然后做一条过原点的直线,你

protecteyesight的博客 623

HDU 6127 Hard challenge 计算几何 极角排序

Hard challenge Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Total Submission(s): 982    Accepted Submission(s): 405 Problem Description There are n

qq_33859479的博客 280

hdu6127 Hard challenge 2017多校第七场1008 计算几何 极角排序+双指针

hdu6127 Hard challenge 2017多校第七场 计算几何 极角排序+双指针 题意:给出n个点的坐标,它们的价值是vali,任意两点间连线的价值是两个点的乘积,且任意两点的连线不经过圆心。现在你可以选定一条经过原点的直线,求和这条直线相交的两点连线的价值和。 题解:其实公式抽象出来就是a*b:a是直线上部分的所有点的价值和,b是直线下部分的所有点的价值和。一开始想的ba所有点的x,y +1e9+5,都移动到第一象限,再根据斜率排序,结果wa了。后来队友给出了思路:所有点不变,按极角排序,然后

ACZone 270

hdu 6127 : Hard challenge (2017 多校第七场 1008)(计算几何)

题目链接 题意:二维平面上有n个点(没有重叠,都不在原点,任意两点连线不过原点),每个点有一个权值,用一条过原点的直线把他们划分成两部分,使两部分的权值和的乘积最大。输出最大的乘积。 极角排序后,将原来(-pi,pi]区间的元素copy到(pi,3pi],用双指针维护一个角度差不超过pi的区间,记区间的权值和为sum1,用sum1*(sum-sum)更新ans #include<b...

weixin_33937499的博客 164

HDU 6127 Hard challenge(思维+计算几何)——2017 Multi-University Training Contest - Team 7

传送门Just do itTime Limit: 5000/2500 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)Total Submission(s): 851    Accepted Submission(s): 485Problem Description There is a nonnegative integ

代码改变世界 449

HDU 6127 Hard challenge(级角排序)

Hard challenge Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Total Submission(s): 1272    Accepted Submission(s): 540 Problem Description There are 

K键盘里的青春K 404

HDU 6127 Hard challenge(几何)

【题目链接】hdu-6127 【题意】平面直角坐标系上有n个整点,第i个点有一个点权v​​,坐标为(xi,yi),其中不存在任意两点连成的直线经过原点。这些整点两两之间连有一条线段,线段的权值为其两端点的权值之积。你需要作一条过原点而不过任意一个给定整点的直线,使得和这条直线相交的线段的权值和最大。 【样例】 Sample Input 2 2 1 1 1 1 -1 1 3 1 1

No Rain,No L'Arc~en~Ciel 369

HDU6127-Hard challenge

HDU6127 题意:给定n个平面坐标点,任意两个点两两连线(连线不过原点),每个点带权值,然后任意两个点所连成的线段的权值为点权的乘积,找一条过原点的直线,要求它所穿过的线段的权值和最大,输出最大权值和 官方题解:对于一条直线,线段权值和实际上就等于其两边点权和的乘积,所以把所有点按极角排个序,然后扫一圈就好了。(喵了个咪)

weixin_38287798的博客 250

hdu6127 Hard challenge

简单几何题

ACoder 240
上一篇: HDU6092 Rikka with Subset[母函数]
下一篇: BZOJ3884 上帝与集合的正确用法[指数循环节]
ControlBear
博客等级 码龄11年 34粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值