【题目链接】 http://acm.hdu.edu.cn/showproblem.php?pid=5738

【题目大意】

  给出平面中一些点,在同一直线的点可以划分为一个集合,问可以组成多少包含元素不少于2的集合。

【题解】

  最重要的还是处理点重合,和线重复计算的问题,对于每个点,进行极角排序,作为端点,然后统计包含它的每个集合即可。思路非常简单,然而比赛的时候……一脸懵逼地用map,pair,然后转战hash。看起来对于计算几何的敏感度还有待加强。

【代码】

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
using namespace std;
const int N=1010,mod=1e9+7;
int T,pw[N],n,ans;
struct Point{
int x,y;
Point(){}
Point(int _x,int _y):x(_x),y(_y){}
Point operator - (const Point &p){return Point(x-p.x,y-p.y);}
bool operator < (const Point &p)const{return x<p.x||(x==p.x&&y<p.y);}
bool operator == (const Point &p){return x==p.x&&y==p.y;}
void reduce(){int g=__gcd(abs(x),abs(y));if(g)x/=g,y/=g;}
}p[N],q[N];
int main(){
scanf("%d",&T);pw[0]=1;
while(T--){
scanf("%d",&n);ans=0;
for(int i=0;i<n;i++){
pw[i+1]=pw[i]*2%mod;
scanf("%d%d",&p[i].x,&p[i].y);
}sort(p,p+n);
for(int i=0;i<n;i++){
int m=0,cnt=0;
for(int j=i+1;j<n;j++){
if(p[j]==p[i])cnt++;
else q[m++]=p[j]-p[i];
}for(int j=0;j<m;j++)q[j].reduce();
sort(q,q+m);ans=(ans+pw[cnt]-1)%mod;
for(int x=0,y;x<m;x=y){
for(y=x;y<m&&q[x]==q[y];y++);
ans=(ans+(long long)pw[cnt]*(pw[y-x]-1)%mod)%mod;
}
}printf("%d\n",ans);
}return 0;
}

HDU 5738 Eureka(极角排序)的更多相关文章

  1. hdu 5738 Eureka 极角排序+组合数学

    Eureka Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  2. HDU 5738 Eureka 统计共线的子集个数

    Eureka 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5738 Description Professor Zhang draws n poin ...

  3. HDU 5738 Eureka

    传送门 题目大意: 给出平面上的$n$个点,每个点有唯一的标号($\text{label}$),这$n$个标号的集合记作$S$,点可能重合.求满足下列条件的$S$的子集$T$的数目: 1. $|T|\ ...

  4. hdu-5738 Eureka(组合计数+极角排序)

    题目链接: Eureka Time Limit: 8000/4000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Pr ...

  5. 【极角排序+双指针线性扫】2017多校训练七 HDU 6127 Hard challenge

    acm.hdu.edu.cn/showproblem.php?pid=6127 [题意] 给定平面直角坐标系中的n个点,这n个点每个点都有一个点权 这n个点两两可以连乘一条线段,定义每条线段的权值为线 ...

  6. HDU Always Cook Mushroom (极角排序+树状数组)

    Problem Description Matt has a company, Always Cook Mushroom (ACM), which produces high-quality mush ...

  7. 2017ACM暑期多校联合训练 - Team 7 1008 HDU 6127 Hard challenge (极角排序)

    题目链接 Problem Description There are n points on the plane, and the ith points has a value vali, and i ...

  8. HDU 6538 Neko and quadrilateral(极角排序+旋转坐标系)

    这道题简直太好了,对于计算几何选手需要掌握的一个方法. 首先对于求解四边形面积,我们可以将四边形按对角线划分成两个三角形,显然此时四边形的面积最大最小值就变成了求解里这个对角线最近最远的点对. 对于此 ...

  9. poj2280Amphiphilic Carbon Molecules(极角排序)

    链接 卡了几天的破题,对于hdu的那份数据,这就一神题.. 借助极角排序,枚举以每一个点进行极角排序,然后构造两条扫描线,一个上面一个下面,两条同时走,把上线和下线的点以及上线左边的点分别统计出来,如 ...

随机推荐

  1. Scala基础入门-4

    Scala学习——类 简单类和无参方法 class Counter { private var value = 0 // 必须初始化字段 def increment() { value += 1 } ...

  2. sass颜色

    1只定义一次颜色 {优点:可以给变量赋予不同的值: {缺点:变量名称更改与变量值混乱: 2变浅加深 /*颜色函数*/ .warning-box { background-color:lighten($ ...

  3. javascript定时器(上)

    (一).setInterval 间隔性 function show(){ alert(‘a’); } setInterval(show,1000); 每隔1000毫秒(1秒)执行一次show这个函数: ...

  4. 自学HTML5第三节(拖放效果)

    今天来看看网页上的拖放效果,首先来看看什么是拖放———— 拖放 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 浏览器支持 Inte ...

  5. Flink Program Guide (2) -- 综述 (DataStream API编程指导 -- For Java)

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  6. text-overflow: ellipsis;省略号颜色设置

    参考stackoverfolow 想要给元素添加text-overflow: ellipsis;样式,必须保证改其父元素是块级元素,如果其是行级元素,可以通过设置display:block;或者dis ...

  7. Scrapy的架构初探

    Scrapy,Python开发的一个web抓取框架. 1,引言 Python即时网络爬虫启动的目标是一起把互联网变成大数据库.单纯的开放源代码并不是开源的全部,开源的核心是“开放的思想”,聚合最好的想 ...

  8. C语言字符和字符串随记

    ==========================第11章 字符和字符串函数==========================震惊:字符串常量属于静态存储类,常量引号中的内容作为指向该字符串存储位 ...

  9. Datagridview控件实现分页功能

    可以进行sql语句进行设置:      1.先新建一个窗体,一个DataGridView控件.两个label控件.两个Button控件   2.代码如下: using System; using Sy ...

  10. C++实现线程池 .

    C++实现线程池. 欢迎转载,转载请注明原出处:http://blog.csdn.net/ithzhang/article/details/9020283 代码地址:https://github.co ...