这题我真是无能为力了

这题的做法还是挺简单的

枚举左下角的点做为原点,把其余点按极角排序    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. xlistview的java(头)

    package com.bwie.xlistviews; import com.bwie.test.R; import android.content.Context;import android.u ...

  2. iOS之沙盒机制和如何获取沙盒路径

    iOS APP可以在自己的沙盒里读写文件,但是,不可以访问其他APP的沙盒.每一个APP都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过URL Scheme.沙盒里面的文件可以是照片.声音文件. ...

  3. Oracle GoldenGate 12c中的协同交付(Coordinated Delivery)

    OGG 12c中,并行交付有2种模式:集成交付.协同交付.不过集成交付只能针对目标端是oracle数据库(有版本要求)使用,而协同交付则可以在非oracle数据库上使用. 先来看2个问题, l 为什么 ...

  4. Javascript计数器

    <!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...

  5. 《day10》

    //65-面向对象-接口-接口的思想 /* 举例:笔记本电脑. 1,接口的出现对功能实现了扩展. 2,接口的出现定义了规则. 3,接口的出现降低了耦合性.(解耦) 接口的出现完成了解耦,说明有两方,一 ...

  6. PAT 10-1 在字符串中查找指定字符

    百度了一下另外两位同学的做法,都是先判断是否匹配,然后再用一个for()循环输出,我当然也是先判断,然后,就直接puts(),还是巧妙一点,题设要求及代码实现如下 /* Name: Copyright ...

  7. ajax 中的一些方法应用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. JS中关于 一个关于计时器功能效果的实现

    optionSearch(); function optionSearch() { //定义一个清除计时器的变量 var timer = null; //自选标题区域 $("#optiona ...

  9. 重拾java系列一java基础(1)

    前言,不知不觉,从接触java到工作至今已有两年的时间,突然感觉自己的基础知识还很薄弱,有些知识虽然知道,但是停留在表面上,没有深挖,或者实践过,感觉掌握的很肤浅,而且时间一长,就觉得忘记了,我觉得这 ...

  10. 王家卫i

    〈旺角卡门〉 因为我很了解我自己,我不能对你承诺什么. 你不要说两次,说两次我就相信了. 我宁愿做一日英雄,都不想成世做条虫! 厨房里有煮好的饭,另外我还买了几个杯子,我知道,用不了多久就都会被打破, ...