博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 1132 POI2008 Tro
阅读量:7211 次
发布时间:2019-06-29

本文共 1280 字,大约阅读时间需要 4 分钟。

    大水题=_=,可我想复杂了……

    很裸的暴力,就是加了个小优化……

    叉积求面积 :abs(xi*yj - yi*xj) 所以去掉绝对值,把 xi 和 xj 提出来就可以求和了

    去绝对值加个极角排序,每次把最左边的点当成原点,然后剩下的排序,接着枚举第二个点,求叉积之和……

    坐标都是整数,用long long,最后再除2

    上代码:

#include 
#include
#include
#include
#include
#include
#define N 3010using namespace std;struct sss{ long long x, y;}dian[N], now, zan[N];int n;long long ans = 0;long long chaji(sss x, sss y){ return (x.x-now.x)*(y.y-now.y) - (x.y-now.y)*(y.x-now.x);}bool cmp1(sss x, sss y) { return x.x == y.x ? x.y < y.y : x.x < y.x; }bool cmp2(sss x, sss y ){ return chaji(x, y) > 0; }int main(){ scanf("%d", &n); for (int i = 1; i <= n; ++i) scanf("%lld%lld", &dian[i].x, &dian[i].y); sort(dian+1, dian+1+n, cmp1); for (int i = 1; i <= n-2; ++i) { now = dian[i]; long long ty = 0, tx = 0; for (int j = i+1; j <= n; ++j) zan[j] = dian[j]; sort(zan+i+1, zan+1+n, cmp2); for (int j = i+1; j <= n; ++j) { ty += zan[j].y-now.y; tx += zan[j].x-now.x; } for (int j = i+1; j <= n-1; ++j) { ty -= zan[j].y-now.y; tx -= zan[j].x-now.x; ans += (zan[j].x-now.x)*ty - (zan[j].y-now.y)*tx; } } if (ans % 2) printf("%lld.5\n", ans/2); else printf("%lld.0\n", ans/2);}

 

转载于:https://www.cnblogs.com/handsomeJian/p/4006136.html

你可能感兴趣的文章
LeetCode 58 Spiral Matrix II
查看>>
iTunes 安装ipa文件到iPhone上
查看>>
PLSQL:[1]plsql中文乱码,显示问号
查看>>
兼容iOS 10 资料整理笔记
查看>>
【小白的CFD之旅】22 好网格与坏网格
查看>>
MySQL--指定浮点型数据的精确度TRUNCATE
查看>>
【WPF】动态设置Binding的ConverterParameter转换器参数
查看>>
代码生成工具更新--快速生成Winform框架的界面项目
查看>>
Java基础-SSM之mybatis快速入门篇
查看>>
C#窗体控件-单选按钮控件RadioButton
查看>>
Android ADB命令
查看>>
JS 英文不截断单词截取
查看>>
Oracle 数据定义
查看>>
百度分享自定义内容和图片
查看>>
Qt控件中的属性sizePolicy说明
查看>>
Deep Learning(深度学习)学习笔记整理系列
查看>>
lua对模块接口扩展的一种方法
查看>>
nyoj116士兵杀死(两)段树单点更新
查看>>
cdoj 1252 24点游戏 dfs
查看>>
JAVA中int、String的类型转换
查看>>