2023牛客多校第一场B Anticomplementary Triangle

news2024/11/27 16:46:54

①:有结论:面积最大的三角形即为所求
证明:若有点在面积最大的三角形对应 “ A n t i c o m p l e m e n t a r y T r i a n g l e ” “Anticomplementary Triangle” AnticomplementaryTriangle之外,一定能取得更大的面积。如下图:

②: O ( n ) O(n) O(n)时间内找到这个三角形
1. O ( n 2 ) 1.O(n^2) 1.O(n2)显然,因为 i , j i,j i,j固定后,面积关于坐标k的函数一定是单峰函数, j , k j,k j,k可以当双指针做,复杂度少一个 n n n
2. 2. 2.假如依然按双指针做,固定 i , j 0 i,j0 i,j0时找到最优的 k 0 k0 k0,固定 i , j 1 i,j1 i,j1时找到最优的 k 1 k1 k1,固定 i , j 2 i,j2 i,j2时找到最优的 k 2 k2 k2,并且固定 i , k 0 i,k0 i,k0时找到的最优解是 j 2 j2 j2
现证明 S ( i , j 1 , k 1 ) < S ( i , j 2 , k 2 ) S(i,j1,k1)<S(i,j2,k2) S(i,j1,k1)<S(i,j2,k2)
根据定义可列出如下不等式:
S ( i , j 1 , k 0 ) < S ( i , j 2 , k 0 ) < S ( i , j 2 , k 1 ) < S ( i , j 2 , k 2 ) S(i,j1,k0)<S(i,j2,k0)<S(i,j2,k1)<S(i,j2,k2) S(i,j1,k0)<S(i,j2,k0)<S(i,j2,k1)<S(i,j2,k2)
满足 S ( i , j 1 , k 0 ) < S ( i , j 2 , k 0 ) S(i,j1,k0)<S(i,j2,k0) S(i,j1,k0)<S(i,j2,k0) 的情况下,图形如下所示,故可得到另一个不等式: S ( i , j 1 , k 1 ) < S ( i , j 2 , k 1 ) S(i,j1,k1)<S(i,j2,k1) S(i,j1,k1)<S(i,j2,k1)
得证
请添加图片描述
原本是 j j j依次枚举, k k k双指针跳转,这个结论可得到 j , k j,k j,k绑定, i i i j , k j,k j,k的结合体做双指针,复杂度 O ( n ) O(n) O(n)

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+3;
struct point{
	int x,y;
}p[N];
#define gc getchar
inline int rd(){
	int x=0,fl=1;char ch=gc();
	for (;ch<48||ch>57;ch=gc())if(ch=='-')fl=-1;
	for (;48<=ch&&ch<=57;ch=gc())x=x*10+(ch^48);
	return x*fl;
}
int cross(point p0,point p1,point p2){
	return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}
int li,lj,lk,n,i;
#define upd if(tmp>ans)ans=tmp,li=i,lj=j,lk=k;
void rotate(){
	int ans=0;
	p[n]=p[0];
	for (int i=0,j=1,k=2;i<n;i++){
		while (1){
			int tmp,jj=j,kk=k;
			while ((tmp=cross(p[i],p[j],p[k]))<cross(p[i],p[j],p[k+1])) k=(k==n-1?0:k+1);
			upd
			while ((tmp=cross(p[i],p[j],p[k]))<cross(p[i],p[j+1],p[k])) j=(j==n-1?0:j+1);
			upd
			if (j==jj && k==kk) break;
		}
	}
}
signed main(){
	n=rd();
	for (i=0;i<n;i++) p[i].x=rd(),p[i].y=rd();
	rotate();
	printf("%lld %lld %lld",li+1,lj+1,lk+1);
}

其实还可以类似 j j j的证法证一证 i i i,三个数一起循环看起来也更优美一点,代码如下:

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+3;
struct point{
    int x,y;
}p[N];
#define gc getchar
inline int rd(){
	int x=0,fl=1;char ch=gc();
	for (;ch<48||ch>57;ch=gc())if(ch=='-')fl=-1;
	for (;48<=ch&&ch<=57;ch=gc())x=x*10+(ch^48);
	return x*fl;
}
int cross(point p0,point p1,point p2){
    return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}
int li,lj,lk,n,i;
#define upd if(tmp>ans)ans=tmp,li=i,lj=j,lk=k;
void rotate(){
    int ans=0;
    p[n]=p[0];
    int i=0,j=1,k=2;
    bool fl=0;
    while (k && !fl){
    	int ii=i,jj=j,kk=k,tmp;
        while((tmp=cross(p[i],p[j],p[k]))<cross(p[i],p[j],p[k+1]))
        	if (k==n-1) fl=1,k=0;
        	else k++;
		upd
        while((tmp=cross(p[i],p[j],p[k]))<cross(p[i],p[j+1],p[k])) j=(j==n-1?0:j+1);
		upd
        while((tmp=cross(p[i],p[j],p[k]))<cross(p[i+1],p[j],p[k])) i=(i==n-1?0:i+1);
        upd
        if (i==ii && j==jj && k==kk) k=(k==n-1?0:k+1);
    }
}
signed main(){
	n=rd();
	for (i=0;i<n;i++) p[i].x=rd(),p[i].y=rd();
	rotate();
	printf("%lld %lld %lld",li+1,lj+1,lk+1);
}

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

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

相关文章

14款奔驰R400升级ACC自适应巡航系统,解放您双脚

有的时候你是否厌倦了不停的刹车、加油&#xff1f;是不是讨厌急刹车&#xff0c;为掌握不好车距而烦恼&#xff1f;如果是这样&#xff0c;那么就升级奔驰原厂ACC自适应式巡航控制系统&#xff0c;带排队自动辅助和行车距离警报功能&#xff0c;感受现代科技带给你的舒适安全和…

实时监测与报警,探索CMS系统在半导体设备安全管理中的作用

在半导体制造行业&#xff0c;设备的安全管理对于保障生产运行和员工安全至关重要。中央设备状态监控系统CMS&#xff08;central monitoring system&#xff09;是一种关键的解决方案&#xff0c;为企业提供实时监测和报警功能&#xff0c;有效应对设备安全管理的挑战。本文将…

【IDEA2023】解决IDEA中快捷键Alt+Enter不能引入局部变量

1、打开设置 File ➡️ Settings ➡️ Editor ➡️ Intentions 搜索refactorings&#xff0c;将Introduce local variable这个选项勾选上 将Introduce local variable这个选项勾选上 OK&#xff0c;Apply

怎么制作思维导图简单又漂亮?看看这几款常用模板

怎么制作思维导图简单又漂亮&#xff1f;制作思维导图可以帮助我们更好地梳理思路、整理信息。它可以让我们将复杂的信息变得易于理解和记忆&#xff0c;并且可以帮助我们更好地组织各种想法和概念。通过制作思维导图&#xff0c;我们可以更清晰地看到问题的本质&#xff0c;找…

3.Cesium中实体Entity创建(超详细)

前言 在学习 Cesium 的过程中&#xff0c;我发现官方文档冗长且阅读困难&#xff0c;为此我结合官方文档与自己的学习笔记&#xff0c;对其进行归类总结&#xff1b;本文中&#xff0c;我将介绍 Cesium 中创建实体的方法&#xff0c;并对其进行分类&#xff0c;帮助读者快速理解…

【中危】Apache StreamPipes <0.92.0 权限管理不当漏洞

漏洞描述 Apache StreamPipes 是一个开源的数据流处理框架。 Apache StreamPipes 受影响版本中由于 UserResource.java 中的 updateAppearanceMode、registerUser、registerService 函数未对用户身份进行验证&#xff0c;具有登录权限的普通用户可通过 {userId}/appearance/m…

火得不要不要的人工智能,SpringBoot实现人脸识别功能

需求分析 一、人脸注册 step1&#xff1a;人像采集。在注册页面上用html中video组件和js调用笔记本摄像头&#xff0c;并抓取人像图片。没有摄像头的笔记本、台式机的童鞋告辞吧&#xff0c;走好不送。。。 step2&#xff1a;人像上传至项目文件夹。将在页面采集到的人像数据…

TypeScript基础篇 - TS的Helloworld和环境配置

目录 ts-node&#xff08;演示&#xff09; src/hello.ts tsconfig.json(演示) tsconfig.json 小节总结 总结一 总结二 总结三 一张ai生成图 ts-node&#xff08;演示&#xff09; src/hello.ts // : number 【类型的标注】,add(x, y): number// 标注返回值为数字 f…

经验分享:多用户商城开发注意事项

互联网时代&#xff0c;电子商务已经成为了一种常见的购物方式。为了满足用户需求和提供更好的购物体验&#xff0c;越来越多的企业选择开发多用户商城。 什么是多用户商城呢&#xff1f;多用户商城允许多个商家在同一个平台上售卖商品&#xff0c;给用户提供了更大的选择空间和…

【Apifox】国产测试工具雄起

在开发过程中&#xff0c;我们总是避免不了进行接口的测试&#xff0c; 而相比手动敲测试代码&#xff0c;使用测试工具进行测试更为便捷&#xff0c;高效 今天发现了一个非常好用的接口测试工具Apifox 相比于Postman&#xff0c;他还拥有一个非常nb的功能&#xff0c; 在接…

使用Rational Rose(速成)

Rational Rose 用例图&#xff1a;Use Case Diagram 类图&#xff1a;Class Diagram 对象图&#xff1a;Object Diagram 组件图&#xff1a;Component Diagram 部署图&#xff1a;Deployment Diagram 顺序图&#xff1a;Sequence Diagram 协作图&#xff1a;Collaboration Diag…

Mysql数据库的管理

文章目录 一、数据库的基本操作1、登录数据库2、创建数据库并进入数据库3、查看数据库结构4、常用的数据库类型5、char和varchar的区别 二、Mysql数据文件三、SQL语句1、SQL语言分类2、DDL数据定义语言1.创建新的数据库2.创建新的表、查看数据表的结构3.删除指定数据表4.删除指…

2015年:筛选链表

3756. 筛选链表 一个单链表中有 m 个结点&#xff0c;每个结点上的元素的绝对值不超过 n 。 现在&#xff0c;对于链表中元素的绝对值相等的结点&#xff0c;仅保留第一次出现的结点而删除其余绝对值相等的结点。 请输出筛选后的新链表。 例如&#xff0c;单链表 21 ->…

Opencv入门必读知识

目录 前言 什么是Opencv&#xff1f; 0、预备知识 导入模块的方式 颜色空间 绝对路径与相对路径 国内镜像源 Python环境的安装 PIP命令下载第三方库 pip命令下载 Pycharm设置解释器下载 conda命令下载 pip不是外部和内部命令 1、调用Opencv的API &#xff08;1&a…

数据库应用:MySQL备份与恢复

目录 一、理论 1.数据备份 2.完全备份与恢复 3.完全备份与恢复应用 4.增量备份与恢复 5.增量备份与恢复应用 6.使用脚本备份 7.日志管理 二、实验 1.完全备份与恢复 2.增量备份与恢复 3.使用脚本备份 三、问题 1.mysqldump报错 四、总结 一、理论 1.数据备份 …

2、算法好坏的衡量尺度

上一讲我们大概说明了数据在内存中的存储方式。这里我们说一下算法性能评价的角度。 我们说一个算法是否高效&#xff0c;一般会从两个角度来评价&#xff0c;即 时间复杂度 和 空间复杂度。 时间复杂度的计量单位是语句运行次数。常用的符号表示是O(x)。这里的x可以是不同的…

EXCEL里如何判断多个单元格/数据相等的小技巧

目录 1 问题&#xff1a;EXCEL里如何判断多个数据相等 2 错误方法 ABCD... 3 正确方法1 countif() 4 正确方法2&#xff1a; {and(exact())} 1 问题&#xff1a;EXCEL里如何判断多个数据相等 有时候&#xff0c;我们可能需要判断10个数据相等这时候写嵌套&#xff0c;或者…

常用API学习04(Java)

System System类包含几个有用的类字段和方法。它不能被实例化。System类提供的System包括标准输入&#xff0c;标准输出和错误输出流;访问外部定义的属性和环境变量;一种加载文件和库的方法;以及用于快速复制阵列的一部分的实用方法. public static void exit(int status) …

WEB:easytornado

背景知识 Tornado 题目 一个一个点击尝试吧 /flllllllllag这个文件&#xff0c;估计是flag 发现了render&#xff0c;render是渲染HTML页面用到的函数。 发现加密方式是MD5值是文件名的MD5加上cookie_secret这个值&#xff0c;之后再MD5加密 获取cookie_secret的值 http://…