这题我真是无能为力了

这题的做法还是挺简单的

枚举左下角的点做为原点,把其余点按极角排序    PS.是作为原点,如枚举到 k 时,对于所有 p[i] (包括p[k]) p[i]-=p[k] (此处为向量减法)

排序后满足 i<j 的两个向量 p[i] 和 p[j] 的叉积都是正数了

ΣΣp[i]×p[j] = ΣΣ(p[i].x*p[j].y-p[i].y*p[j].x) = Σ(p[i].x*Σp[j].y)-Σ(p[i].y*Σp[j].x)

计算叉积和的复杂度就从 O(n2) 降为了 O(n)

再加上枚举和排序的复杂度,总复杂度就是 O(n2logn)

但是我的代码似乎被 BZOJ 讨厌了%>_<%

本地测都是 A 的,校内 OJ 也 A 了,但BZOJ一交上去秒 WA 啊,55555555

求大爷指导……

这是错误的代码,求教做人

 #include <cstdio>
#include <algorithm>
const int size=;
typedef struct point vector;
typedef long long llint; namespace IOspace
{
inline int getint()
{
register int num=;
register char ch;
do ch=getchar(); while (ch<'' || ch>'');
do num=num*+ch-'', ch=getchar(); while (ch>='' && ch<='');
return num;
}
inline void putint(llint num, char ch='\n')
{
char stack[];
register int top=;
if (num==) stack[top=]='';
for ( ;num;num/=) stack[++top]=num%+'';
for ( ;top;top--) putchar(stack[top]);
if (ch) putchar(ch);
}
} struct point
{
llint x, y;
inline point() {}
inline point(llint _x, llint _y):x(_x), y(_y) {}
inline vector & operator += (vector v) {x+=v.x; y+=v.y; return *this;}
inline vector & operator -= (vector v) {x-=v.x; y-=v.y; return *this;}
};
point p[size];
inline llint operator * (vector a, vector b) {return a.x*b.y-a.y*b.x;}
inline bool operator < (point a, point b) {return a*b>;}
inline void swap(point & a, point & b) {point t=a; a=b; b=t;} int N;
inline llint count(int); int main()
{
llint ans=; N=IOspace::getint();
for (int i=;i<=N;i++) p[i].x=IOspace::getint(), p[i].y=IOspace::getint(); for (int i=N;i>=;i--) ans+=count(i); bool b=ans&1LL;
IOspace::putint(ans>>1LL, '.');
IOspace::putint(b?:); return ;
}
inline llint count(int n)
{
llint ret=; int k=;
for (int i=;i<=n;i++)
if (p[i].x<p[k].x || p[i].x==p[k].x && p[i].y<p[k].y)
k=i;
swap(p[k], p[n]); for (int i=;i<=n;i++) p[i]-=p[n]; std::sort(p+, p+n); vector s(, );
for (int i=;i<=n;i++)
{
ret+=s*p[i];
s+=p[i];
} return ret;
}

欲哭无泪的本傻系列

我再把正确的放上来,帮助理解题解:

 #include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std; #define maxn 30010
typedef long long ll;
struct xllend3
{
int x,y;
} orz[maxn]; int n,m;
ll ans; bool cmp(const xllend3 &a,const xllend3 &b)
{
return a.x*b.y>a.y*b.x;
}
ll orzhzw(int n)
{
int i=;
for (int j=;j<n;j++)
if (orz[j].x<orz[i].x||(orz[j].x==orz[i].x && orz[j].y<orz[i].y))
i=j;
swap(orz[i],orz[n-]);
for (int i=;i<n-;i++)
orz[i].x-=orz[n-].x,orz[i].y-=orz[n-].y;
sort(orz,orz+n-,cmp);
ll gui=;
ll sx=,sy=;
for (int i=n-;i>=;i--)
{
gui+=(ll)orz[i].x*sy-(ll)orz[i].y*sx;
sx+=orz[i].x;
sy+=orz[i].y;
}
return gui;
} int main()
{
scanf("%d",&n);
for (int i=;i<n;i++) scanf("%d%d",&orz[i].x,&orz[i].y);
for (int i=n;i>;i--) ans+=orzhzw(i);
cout<<ans/;
if (ans&) cout<<".5"<<endl;else cout<<".0"<<endl;
return ;
}

Orz mxh1999

[POI 2008][BZOJ 1132]Tro的更多相关文章

  1. BZOJ 1132 Tro

    Tro [问题描述] 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 [输入格式] 第一行给出数字N,N在[3,3000] 下面N行给出N个点的坐标,其值在[0,10 ...

  2. [POI 2008&洛谷P3467]PLA-Postering 题解(单调栈)

    [POI 2008&洛谷P3467]PLA-Postering Description Byteburg市东边的建筑都是以旧结构形式建造的:建筑互相紧挨着,之间没有空间.它们共同形成了一条长长 ...

  3. BZOJ.1132.[POI2008]Tro(极角排序)

    BZOJ 洛谷 考虑暴力,每次枚举三个点,答案就是\(\frac12\sum_{k<j<i}(i-k)\times(j-k)\). 注意到叉积有分配率,所以固定\(k\),枚举\(i,j\ ...

  4. bzoj 1132 [POI2008]Tro 几何

    [POI2008]Tro Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 1796  Solved: 604[Submit][Status][Discu ...

  5. BZOJ 1132 [POI2008]Tro(极角排序)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1132 [题目大意] 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和(N&l ...

  6. bzoj 1132 POI2008 Tro

    大水题=_=,可我想复杂了…… 很裸的暴力,就是加了个小优化…… 叉积求面积 :abs(xi*yj - yi*xj) 所以去掉绝对值,把 xi 和 xj 提出来就可以求和了 去绝对值加个极角排序,每次 ...

  7. 【刷题】BZOJ 1132 [POI2008]Tro

    Description 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 Input 第一行给出数字N,N在[3,3000] 下面N行给出N个点的坐标,其值在[0,10 ...

  8. bzoj 1112 poi 2008 砖块

    这滞胀题调了两天了... 好愚蠢的错误啊... 其实这道题思维比较简单,就是利用treap进行维护(有人说线段树好写,表示treap真心很模板) 就是枚举所有长度为k的区间,查出中位数,计算代价即可. ...

  9. [BZOJ 1124][POI 2008] 枪战 Maf

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

随机推荐

  1. [安卓]AndroidManifest.xml文件简介及结构

    1.AndroidManifest.xml文件简介: 每个应用程序在它的根目录中都必须要有一个AndroidManifest.xml(名字须精确一致)文件.这个清单把应用程序的基本信息提交给Andro ...

  2. iOS 设计模式之工厂模式

    iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...

  3. 表单验证与Json配合

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...

  4. 网络配置和NFS和TFTP的配置

    2015.1.20(今天是个开始) 整理考试试卷: 注:在做指针的题目的时候,要注意多个指针指向一个地址的情况,只要其中一个指针对这个地址中的值进行了修改,后面的指针 在对这个地址的内容进行引用的时候 ...

  5. FATE_完全背包

    ps:原来用新浪,可是代码的排版不是很好,所以用博客园啦,先容许我把从八月份开始的代码搬过来,从这里重新出发,希望这里可以一直见证我的成长. Time Limit: 2000/1000 MS (Jav ...

  6. 【JOJO】真男人-坚不可摧

    DIO,你输给我的原因只有一个! 那就是,你惹怒了我! http://www.bilibili.com/video/av461689/

  7. M1: 创建UWP空项目

    本小节介绍如何在Visual Studio中创建一个UWP项目,Visual Studio中提供了快速创建各种项目的类型模板.在Visual Studio 2015中,同样提供了UWP项目模板. 学完 ...

  8. LeetCode Find the Duplicate Number 找重复出现的数(技巧)

    题意: 有一个含有n+1个元素的数组,元素值是在1-n之间的整数,请找出其中出现超过1次的数.(保证仅有1个出现次数是超过1的数) 思路: 方法一:O(nlogn).根据鸽笼原理及题意,每次如果< ...

  9. 再生核希尔伯特空间(RKHS)在监督学习(SVM)中的应用

    [转载请注明出处]http://www.cnblogs.com/mashiqi 2014/4/10 在网上找到一个讲reproducing kernel的tutorial看了一看,下面介绍一下. 首先 ...

  10. 【题解】【矩阵】【回溯】【Leetcode】Unique Paths II

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...