利用向量叉积求三角形的面积(+STL:nth_element求第K大的数)
牛客寒假算法集训营2
https://ac.nowcoder.com/acm/contest/327/A
A.处女座的签到题
题目描述
平面上有n个点,问:平面上所有三角形面积第k大的三角形的面积是多少?
/*
已知坐标求三角形的面积,最好的方法是求出相邻两个向量的叉积的绝对值(平行四边形面积)然后除以2
比如由三个点A(x1,y1),B(x2,y2),C(x3,y3)构成的三角形ABC
求它面积的公式为:
|向量AB×向量AC| / 2 = |(x2-x1)(y3-y1)-(x3-x1)(y2-y1)| / 2;
关于向量叉积求三角形面积,这里有一篇写的十分好比较全的博客:传送门
对于本题,因为要除以2,并且要求保留2位小数,叉积的绝对值要不是奇数要不就是偶数,所以可以把叉积绝对值算出来用long long数组(喜欢省内存)存起来,然后分奇数偶数讨论保留的后两位小数是什么(even : %lld.00 odd :%lld.50)~
然后要求第K大的面积,时间复杂度为O(n),可以用快排的思想(“快速选择算法”),也可以用STL里的nth_element;
nth_element基本用法和sort有点像:
nth_element作用为求第n大的元素,并把它放在第n位置上,如果数组是从0开始存的数据,那么用法为nth_element(a,a+k-1,a+n,cmp);
第一个为数组首地址,第二个为第K个数的地址,第三个为末地址,最后一个是排序方式(不写cmp,默认是升序的)
注意:nth_element()函数不过将第n大的数排好了位置,并不返回值
*/
AC_code:
#include <stdio.h>
#include <algorithm>
#define ll long long
const ll N = 10e6;
using namespace std;
struct date
{ll x;ll y;
};
bool cmp(ll a,ll b)
{return a > b;
}
long long a[N];
int main()
{int t,n,k;scanf("%d",&t);while(t--){scanf("%d%d",&n,&k);date d[n+2];for(int i = 0; i < n; i++){scanf("%lld%lld",&d[i].x,&d[i].y);}ll v = 0,w;for(int i = 0; i < n; i++){for(int j = i+1; j < n; j++){for(int k = j+1; k < n; k++){w = (d[j].x-d[i].x)*(d[k].y-d[i].y)-(d[k].x-d[i].x)*(d[j].y-d[i].y);a[v++] = w > 0 ? w : - w;}}}nth_element(a,a+k-1,a+v,cmp);if(a[k-1]%2==0)printf("%lld.00\n",a[k-1]/2);elseprintf("%lld.50\n",a[k-1]/2);}return 0;
}
利用向量叉积求三角形的面积(+STL:nth_element求第K大的数)相关推荐
- 已知三角形三点坐标, 求三角形的面积
摘自:http://blog.sina.com.cn/s/blog_4cddcaa3010008u7.html 已知三角形三点坐标, 求三角形的面积 发表时间:2004-8-10 作者:未知[获得此文 ...
- java继承求三角形圆形面积_java求三角形面积
(min>c)min=c; if(min>d)min=d; System.out.println("min is "+min); } } } 15.test30003求 ...
- 求三角形最大面积(DP)
求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...
- python 三角形的三个边长a,b,c ,求三角形的面积?
已知:三角形的三个边长a,b,c ,求三角形的面积? 海伦公式: s=(a+b+c)/2 import cmath a = 3 b = 4 c = 5p = 0.5*(a+b+c) m = p*(p- ...
- C语言成绩abc,C语言常用经典代码:求三角形的面积、把百分制成绩转换为ABC等级制、其两个自然数的最大公约数和最小公倍数...
C语言 经典常用代码 C语言常用经典代码 求三角形的面积. 把百分制成绩转换为ABC等级制. 其两个自然数的最大公约数和最小公倍数. 求输入n个数的平均值. 求一个数各个位上的数字之和. 求n个数的阶 ...
- 已知三角形三边求面积的c语言程序,已知三角形三边分别为4,5,6,求三角形的面积。用c语言编写程序...
已知三角形三边分别为4,5,6,求三角形的面积.用c语言编写程序 关注:114 答案:6 mip版 解决时间 2021-01-18 16:33 提问者谁把流年搁浅 2021-01-17 23:52 ...
- 1014: 求三角形的面积 C语言
1014: 求三角形的面积 时间限制: 1 Sec 内存限制: 30 MB 提交: 36556 解决: 26725 [状态] [讨论版] [提交] [命题人:admin] 题目描述 给出三角形的三条边 ...
- C语言-- 输入三角形的三边长,求三角形的面积。
分析:已知三角形的三边长度求三角形的面积,要使用海伦公式: #include<stdio.h> #include<math.h> void main() {float a,b, ...
- Java:1014: 求三角形的面积
1014: 求三角形的面积 时间限制: 1 Sec 内存限制: 30 MB 提交: 43703 解决: 32144 [状态] [讨论版] [提交] [命题人:admin] 题目描述 给出三角形的三 ...
最新文章
- C++vector容器学习
- java 根据当前时间获得一周日期
- 三分钟学会.NET Core Jwt 策略授权认证
- 信息学奥赛一本通 1084:幂的末尾 | OpenJudge NOI 小学奥数 7833
- 小记一下:CentOS里用多个iso镜像安装Xen虚拟机
- cubemx spi 中断_STM32 SPI在使用中断时丢弃数据
- c语言全缓冲,C语言缓冲区 - osc_8b4n157m的个人空间 - OSCHINA - 中文开源技术交流社区...
- psp模拟java_PSP超强JAVA模拟器 PSPKVM v0.5 发布下载
- PHP 图片转PDF
- UE4编辑器ToolBar扩展
- Python 学习4-集合、序列
- Android移动开发-Android设备利用光线传感器监测光照强度的实现
- Q-criterion- definition and post-processing
- 2022茶艺师(中级)国家题库模拟考试平台操作
- 蔡氏混沌电路matlab程序,蔡氏混沌电路简介——Chuaapos;s-Circut.pptx-全文可读
- ROM修改---修改本机的mac地址
- WP 微信导出聊天记录备份到电脑
- java jit_Java的JIT
- 勇者斗恶龙(The Dragon of Loowater, UVa 11292)
- js点击网页背景特效和js打字状态特效代码
热门文章
- python在线翻译脚本_用python实现百度翻译的示例代码
- raid读写速度对比_U盘读写速度哪家强?4款全金属USB3.0的U盘读写速度对比
- 哎,辣鸡代码书写准则
- 超干货!当初我要是这么学习操作系统就好了(附带思维导图)
- 计算机用的机械硬盘的工作原理,为啥一震就坏?机械硬盘的构造原理是什么?...
- java executebatch_JDBC批量执行executeBatch
- python引入redis_十六大Python面试题!看完面试官给了我40K的薪资
- java中浮点数的表示_java 浮点数表示法
- OpenCV-文档扫描OCR识别-04
- 冻结拆分_还不会固定表头?速来围观Excel冻结窗格实战教程