题目大意:
  平面直角坐标系上有n个点,问以这n个点为顶点的不同的三角形的面积和是多少?

思路:
  很容易想到一个O(n^3)的暴力,枚举三个点,用海龙公式求一下面积和即可,这样做是40分。
  标算的复杂度是O(n^2 log n),
  首先对所有的点按照位置的左右排序,
  按顺序枚举每一个点i,并将其作为三角形的一个顶点。
  对于顺序在i后面的点关于点i极角排序,并按照极角序枚举每一个点j。
  三角形面积的两倍我们可以用叉积来求。
  为了不枚举第三个顶点,我们可以算一下后缀和。
  这题会爆double,由于小数部分要么是.0要么是.5,我们可以用long long来存一下,最后特判一下奇数偶数即可。

 #include<cstdio>
#include<cctype>
#include<algorithm>
typedef long long int64;
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int N=;
struct Point {
int x,y;
Point operator - (const Point &another) const {
return (Point){x-another.x,y-another.y};
}
int64 operator * (const Point &another) const {
return (int64)x*another.y-(int64)y*another.x;
}
};
Point p[N],t[N];
inline bool cmp1(const Point &a,const Point &b) {
if(a.y==b.y) return a.x<b.x;
return a.y<b.y;
}
inline bool cmp2(const Point &a,const Point &b) {
return a*b>;
}
int main() {
int n=getint();
for(register int i=;i<n;i++) {
p[i]=(Point){getint(),getint()};
}
std::sort(&p[],&p[n],cmp1);
int64 ans=;
for(register int i=;i<n;i++) {
int cnt=;
for(register int j=i+;j<n;j++) {
t[++cnt]=p[j]-p[i];
}
std::sort(&t[],&t[cnt+],cmp2);
Point sum=(Point){,};
for(register int j=cnt;j;j--) {
ans+=sum*t[j];
sum=sum-t[j];
}
}
printf("%lld.%c\n",ans>>,(ans&)?'':'');
return ;
}

[POI2008]Triangles的更多相关文章

  1. Count the number of possible triangles

    From: http://www.geeksforgeeks.org/find-number-of-triangles-possible/ Given an unsorted array of pos ...

  2. [BZOJ1112][POI2008]砖块Klo

    [BZOJ1112][POI2008]砖块Klo 试题描述 N柱砖,希望有连续K柱的高度是一样的. 你可以选择以下两个动作 1:从某柱砖的顶端拿一块砖出来,丢掉不要了. 2:从仓库中拿出一块砖,放到另 ...

  3. [bzoj1122][POI2008]账本BBB

    1122: [POI2008]账本BBB Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 402  Solved: 202[Submit][Status ...

  4. BZOJ 1113: [Poi2008]海报PLA

    1113: [Poi2008]海报PLA Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1025  Solved: 679[Submit][Statu ...

  5. BZOJ 1116: [POI2008]CLO

    1116: [POI2008]CLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 922  Solved: 514[Submit][Status][ ...

  6. BZOJ 1112: [POI2008]砖块Klo

    1112: [POI2008]砖块Klo Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1736  Solved: 606[Submit][Statu ...

  7. BZOJ 1124: [POI2008]枪战Maf

    1124: [POI2008]枪战Maf Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 617  Solved: 236[Submit][Status ...

  8. BZOJ 1123: [POI2008]BLO

    1123: [POI2008]BLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1030  Solved: 440[Submit][Status] ...

  9. BZOJ 1121: [POI2008]激光发射器SZK

    1121: [POI2008]激光发射器SZK Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 792  Solved: 653[Submit][Sta ...

随机推荐

  1. linux启动过程——(三)

  2. supervisor 简单使用

    supervisor是一个c/s系统,被用来在类Unix系统中监控进程状态.supervisor使用python开发. 服务端进程为supervisord,主要负责启动自身及其监控的子进程,响应客户端 ...

  3. linux网络编程之IO模型

    本文转自作者:huangguisu 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步:      所谓 ...

  4. Linux I2C(一)之常用的几种实例化(i2c_client ) 【转】

    转自:http://blog.csdn.net/lugandong/article/details/48092397 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 前言 方式 ...

  5. 网站服务器压力Web性能测试(2):Webbench:最多模拟3万个并发连接数测试压力

    1.Webbench最多可以模拟3万个并发连接数来测试服务器压力,可以设置压力测试时间和测试请求的成功率.安装Webbench命令: wget https://home.tiscali.cz/~cz2 ...

  6. Oralce Spatial

    1.建立数据库连接 create public database link ytlink connect to hightop identified by hightop using '(DESCRI ...

  7. 20180104 wdcp中的mysql重启不成功

    1.重启不成功是由于/www/wdlinux/mysql-5.5.54/data 中的ib_logfile0.ib_logfile1 和ibdata1的文件存在,可用netstat -lnpt查看当前 ...

  8. tinyhttpd ------ C 语言实现最简单的 HTTP 服务器

    工作流程: 1>服务器启动,在指定端口或随机选取端口绑定httpd服务. 2>收到一个http请求时(其实就是listen端口accept的时候),派生一个线程运行accept_reque ...

  9. CCF试题:高速公路(Targin)

    问题描述 某国有n个城市,为了使得城市间的交通更便利,该国国王打算在城市之间修一些高速公路,由于经费限制,国王打算第一阶段先在部分城市之间修一些单向的高速公路. 现在,大臣们帮国王拟了一个修高速公路的 ...

  10. 数据库SQL调优之"执行计划"【未完待续】

    什么是“执行计划”?“执行计划”怎么用于SQL调优? 内容待添加... 参考文章: [1]写SQL要学会使用"执行计划" by 鹏霄万里展雄飞