Parallelogram
Counting

刚学hash还不会用,看到5000ms的时限于是想着暴力来一发应该可以过。以前做过类似的题,求平行四边形个数,好像是在CF上做的,但忘了时限是多少了,方法是一样的。

题意:给出n个点坐标,求平面中有多少个平行四边形。

思路:我们知道,平行四边形的条件是两条边平行且相等。我们把每条边分解成x和y方向的向量,只要两条边对应相等就可以了,于是预处理所有的边,然后排序,然后相等的肯定在一起,所以用试探法往前,注意每个平形四边形都被记录了两次,所以答案是总数量除以2。

struct line
{
int x,y,i,j;
} a[N*N];
struct node
{
int x,y;
} p[N];
int cmp(node a,node b)
{
if(a.x!=b.x) return a.x<b.x;
return a.y<b.y;
}
int cmp1(line a,line b)
{
if(a.x!=b.x) return a.x<b.x;
return a.y<b.y;
}
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=0; i<n; i++) scanf("%d%d",&p[i].x,&p[i].y);
sort(p,p+n,cmp);
int len=0;
for(int i=0; i<n; i++)
for(int j=n-1; j>i; j--)
{
a[len].i=i,a[len].j=j;
a[len].x=p[j].x-p[i].x,a[len++].y=p[j].y-p[i].y;
}
sort(a,a+len,cmp1);
int ans=0;
for(int i=0; i<len; i++)
{
for(int j=i+1; j<len; j++)
if(a[i].x==a[j].x&&a[i].y==a[j].y)
{
if(a[i].i!=a[j].i&&a[i].i!=a[j].j&&a[i].j!=a[j].i&&a[i].j!=a[j].j)
ans++;
}
else break;//往后没有必要了,不然超时
}
printf("%d\n",ans/2);
}
return 0;
}

最新文章

  1. Myeclipse for Mac快捷键
  2. Dedesql数据库类详解
  3. Android Studio UML 插件 PlantUML 使用语法
  4. robotframework笔记6
  5. Oracle基础&lt;5&gt;--触发器
  6. DAG的动态规划 (UVA 1025 A Spy in the Metro)
  7. 【HDOJ】3601 Coach Yehr’s punishment
  8. Bootstrap_表单_图像
  9. jquery带小图的图片轮换效果
  10. 【Shell基础】循环:for、while、until
  11. Mac环境下 elasticsearch-6.0.1 和 elasticsearch-head 完整安装过程
  12. Java strictfp有什么作用
  13. Android 开发 系统组件集合
  14. Linux磁盘分区与文件系统
  15. 全网最详细的HBase启动以后,HMaster进程启动了,几秒钟以后自动关闭问题的解决办法(图文详解)
  16. 团队项目第二阶段个人进展——Day1
  17. sql 经典面试题及答案(选课表)
  18. Guava之ImmutableMap使用示例
  19. WebService(JAX-WS、XFire、Axis三种)获取客户端ip
  20. python中变量的数据类型总结

热门文章

  1. cat 参数
  2. 解决 FusionCharts3.2.1 首页无法载入的问题
  3. 当ThreadLocal碰上线程池
  4. JSP serverlet区别与联系
  5. RunTests.sh &amp;&amp; RunIPhoneSecurityd.sh
  6. C#入门(3)
  7. aspose.cell 给excel表格设置样式
  8. 转向ARC的说明
  9. (五)VMware Harbor 部署之SSL
  10. Mac上安装Node和NPM【转】