这题我真是无能为力了

这题的做法还是挺简单的

枚举左下角的点做为原点,把其余点按极角排序    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. js和C#中的编码和解码

    同一个字符串,用URL编码和HTML编码,结果是完全不同的. JS中的URL编码和解码.对 ASCII 字母和数字及以下特殊字符无效: - _ . ! ~ * ' ( ) ,/?:@&=+$# ...

  2. matlab调用opencv函数的配置

    环境: VS2010 活动解决方案平台x64 WIN 8.1 Opencv 2.4.3 Matlab 2012a 1.  首先保证vs2010能正确调用opencv函数, 2.  Matlab中选择编 ...

  3. A380上11万一张的机票什么享受?来看看

    上个月底,全球奢华航班排行榜出炉,新加坡航空头等舱荣登第一.不过,比头等舱更豪奢的,将近两万美元一张往返票的“套间”又是怎么样的呢? 新加坡航空的一名常旅客Derek Low就体验了一把全球最豪奢的坐 ...

  4. ios 8+ (xcode 6.0 +)应用程序Ad Hoc 发布前多设备测试流程详解

    我们开发的程序在经过simulator以及自己的iOS设备测试后,也基本完成应用程序了,这时候我们就可以把它发布出去了更更多的人去测试,我们可以在iOS平台使用ad hoc实现. 你在苹果购买的开发者 ...

  5. 深入C#数据类型小部分第二章

    值类型和引用类型C#的值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型. C#的引用类型包括:数组,用户定义的类.接口.委托,object,字符串. 数组的元素,不管是引用 ...

  6. list.clear()和list=null的区别

    以前并没有注意到list.clear()和list=null的区别,其实,区别在于 clear()方法是将list清空,但是对象的引用还在,只不过是一个表现为空引用 list=null是将list对象 ...

  7. STL 源码分析《2》----nth_element() 使用与源码分析

    Select 问题: 在一个无序的数组中 找到第 n 大的元素. 思路 1: 排序,O(NlgN) 思路 2: 利用快排的 RandomizedPartition(), 平均复杂度是 O(N) 思路 ...

  8. 多数求和(java)

    实验题目:从命令行接受多个数字,求和之后输出结果. 设计思想:命令行输入的字符会赋值给args数组,所以在命令行输入数字后,直接取出args的数组长度,作为循环语句的终点判断,然后利用循环将字符型改为 ...

  9. Python的魔法方法 .

    基本行为和属性 __init__(self[,....])构造函数 . 在实例化对象的时候会自动运行 __del__(self)析构函数 . 在对象被回收机制回收的时候会被调用 __str__(sel ...

  10. phpstom 实用laravel 需要附加的 命令

    首先利用composer 下载相关的插件 在根目录执行此代码 composer require barryvdh/laravel-ide-helper 再者在config/app.php 添加一条命令 ...