题意:给定平面上N个点,问是否存在三角形,其面积为S。

思路:选择Y轴,枚举这个Y轴,面积大小只与|y-Y|有关,然后二分,具体的可以先去做BZOJ3707。

具体的:

1,先对点排序,X坐标为第一关键字,Y坐标为第二关键字,从小到大排序。

2,得到C(N,2)条直线,按照它们的斜率为关键字(叉积排序比较准确),从小到大排序。

3,二分答案,对当前直线,我们只处理线段左边(相对来说)的点,左边的点距离当前“Y轴”具有单调性。

而得到当前直线的两个点,相对于下一条直线,其相对位置会发生改变。

简单证明:(瞎证,笔画以下就知道了)

第一个直线L斜率最小,那么它左边的点,到它的相对位置大小,就是第一次排序后的大小:否则L不是斜率最小,易证。

由上一条直线,到下一条直线,对于新的“Y轴”,相对位置改变的只有上一条直线的两点:否则斜率大小有误,易证。

#include <bits/stdc++.h>
#define rep(i,j,k) for(int i=j;i<=k;i++)
using namespace std;
typedef long long ll;
const int maxn=;
struct Point {
int x,y;
bool operator<(const Point& B) const {
return x^B.x?x<B.x:y<B.y;
}
}P[maxn];
typedef Point Vector;
Vector operator - (Vector u, Vector v) { return (Vector){u.x-v.x,u.y-v.y}; }
Vector operator + (Vector u, Vector v) { return (Vector){u.x+v.x,u.y+v.y}; }
ll Cross(Vector u,Vector v) { return 1ll * u.x * v.y - 1ll * u.y * v.x; }
struct Segment {
int u, v;
Vector p;
bool operator<(const Segment& B) const {
return Cross(p, B.p)>;
}
}A[maxn*maxn];
int N,M,pos[maxn]; ll S;
int main() {
cin>>N>>S; S<<=1LL;
rep(i,,N) cin>>P[i].x>>P[i].y;
sort(P+,P+N+);
rep(i,,N) pos[i]=i;
rep(i,,N) rep(j,i+,N) A[++M]=(Segment){i,j,P[i]-P[j]};
sort(A+,A+M+);
rep(i,,M) {
int &a=pos[A[i].u],&b=pos[A[i].v];
Vector p=P[b]-P[a];
int l=,r=a-;
while(l<r){
int mid=(l+r+)>>;
if(abs(Cross(p,P[mid]-P[a]))>=S) l=mid;
else r=mid-;
}
if(abs(Cross(p,P[l]-P[a]))==S){
printf("Yes\n%d %d\n%d %d\n%d %d\n", P[a].x, P[a].y, P[b].x, P[b].y, P[l].x, P[l].y);
return ;
}
swap(a,b);
swap(P[a],P[b]);
}
puts("No");
return ;
}

最新文章

  1. [转]理解RESTful架构
  2. Find them, Catch them
  3. 松下蓄电池与UPS使用和维护
  4. rowspan和colspan
  5. WinHeap.H
  6. BZOJ 4199: [Noi2015]品酒大会( 后缀数组 + 并查集 )
  7. grunt 前端开发环境搭建
  8. Scrapy系列教程(2)------Item(结构化数据存储结构)
  9. MatlabR2015b用了一段时间之后需要重新激活
  10. SpringMVC框架学习笔记(5)——数据处理
  11. Hadoop MapReduce工作原理
  12. Map的四种遍历
  13. MySQL联接查询算法(NLJ、BNL、BKA、HashJoin)
  14. Variable binding depth exceeds max-specpdl-size
  15. Win7 搭建Linux开发环境
  16. MySQL插入去重命令_REPLACE INTO
  17. 创建自己的OAuth2.0服务端(一)
  18. 查看library的依赖树
  19. 解析本内置Linux目录结构
  20. python开发_类型转换convert

热门文章

  1. python 基础 9.12 索引
  2. Python小白的发展之路之Python基础(三)【函数简介】
  3. M - 基础DP
  4. Orthogonal Least Squares Learning Algorithm for Radial Basis Function Networks
  5. Bootstrap学习-网格系统
  6. 我的Android进阶之旅------>Android中android:windowSoftInputMode的用法
  7. Js中的apply和call
  8. IDEA 配置Tomcat 跑Jeecg项目
  9. 安装Nginx 及使用
  10. abap Excel 导入