题目链接:

2338: [HNOI2011]数矩形

Time Limit: 20 Sec  Memory Limit: 128 MB

Description

Input

 

Output

题意:

思路:

求最大的矩形面积,先把这些点转化成线段,记录下线段的长度和中点和两个端点,形成矩形说明对角线长度相等,且共中点,所以把线段按长度和中点排序,如果都相等,然后用三角形的三个顶点坐标计算面积的公式计算最大面积就好了;

AC代码:

  1. /**************************************************************
  2. Problem: 2338
  3. User: LittlePointer
  4. Language: C++
  5. Result: Accepted
  6. Time:5172 ms
  7. Memory:73520 kb
  8. ****************************************************************/
  9.  
  10. #include <iostream>
  11. #include <cstdio>
  12. #include <cstring>
  13. #include <algorithm>
  14. #include <cmath>
  15. #include <bits/stdc++.h>
  16. #include <stack>
  17. #include <map>
  18.  
  19. using namespace std;
  20.  
  21. #define For(i,j,n) for(int i=j;i<=n;i++)
  22. #define mst(ss,b) memset(ss,b,sizeof(ss));
  23.  
  24. typedef long long LL;
  25.  
  26. template<class T> void read(T&num) {
  27. char CH; bool F=false;
  28. for(CH=getchar();CH<'0'||CH>'9';F= CH=='-',CH=getchar());
  29. for(num=0;CH>='0'&&CH<='9';num=num*10+CH-'0',CH=getchar());
  30. F && (num=-num);
  31. }
  32. int stk[70], tp;
  33. template<class T> inline void print(T p) {
  34. if(!p) { puts("0"); return; }
  35. while(p) stk[++ tp] = p%10, p/=10;
  36. while(tp) putchar(stk[tp--] + '0');
  37. putchar('\n');
  38. }
  39.  
  40. const LL mod=1e9+7;
  41. const double PI=acos(-1.0);
  42. const int inf=1e9;
  43. const int N=4e5+10;
  44. const int maxn=1e3+520;
  45. const double eps=1e-12;
  46.  
  47. struct PO
  48. {
  49. LL x,y;
  50. }po[maxn];
  51. struct Seg
  52. {
  53. PO m;
  54. int s,e;
  55. LL dist;
  56. }seg[maxn*maxn];
  57. inline LL dis(int a,int b)
  58. {
  59. return (po[a].x-po[b].x)*(po[a].x-po[b].x)+(po[a].y-po[b].y)*(po[a].y-po[b].y);
  60. }
  61. int cmp(Seg a,Seg b)
  62. {
  63. if(a.dist==b.dist)
  64. {
  65. if(a.m.x==b.m.x)return a.m.y<b.m.y;
  66. return a.m.x<b.m.x;
  67. }
  68. return a.dist<b.dist;
  69. }
  70. inline LL getans(int a,int b,int c)
  71. {
  72. LL sum=po[a].x*po[b].y+po[b].x*po[c].y+po[c].x*po[a].y;
  73. sum=sum-po[a].x*po[c].y-po[b].x*po[a].y-po[c].x*po[b].y;
  74. if(sum<0)return -sum;
  75. return sum;
  76. }
  77. inline LL solve(int temp,int f)
  78. {
  79. return getans(seg[temp].s,seg[temp].e,seg[f].s);
  80. }
  81. int main()
  82. {
  83. int n;
  84. read(n);
  85. For(i,1,n)
  86. {
  87. read(po[i].x);
  88. read(po[i].y);
  89. }
  90. int cnt=0;
  91. for(int i=1;i<=n;i++)
  92. {
  93. for(int j=i+1;j<=n;j++)
  94. {
  95. cnt++;
  96. seg[cnt].s=i;
  97. seg[cnt].e=j;
  98. seg[cnt].m.x=po[i].x+po[j].x;
  99. seg[cnt].m.y=po[i].y+po[j].y;
  100. seg[cnt].dist=dis(i,j);
  101. }
  102. }
  103. sort(seg,seg+cnt+1,cmp);
  104. LL ans=0;
  105. for(int i=1;i<=cnt;i++)
  106. {
  107. for(int j=i+1;;j++)
  108. {
  109. if(seg[j].dist==seg[i].dist&&seg[j].m.x==seg[i].m.x&&seg[j].m.y==seg[i].m.y)ans=max(ans,solve(j,i));
  110. else break;
  111. }
  112. }
  113. cout<<ans<<"\n";
  114. return 0;
  115. }

  

bzoj-2338 2338: [HNOI2011]数矩形(计算几何)的更多相关文章

  1. bzoj2338[HNOI2011]数矩形 计算几何

    2338: [HNOI2011]数矩形 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1535  Solved: 693[Submit][Status ...

  2. BZOJ 2338 HNOI2011 数矩形 计算几何

    题目大意:给定n个点,求一个最大的矩形,该矩形的四个顶点在给定的点上 找矩形的方法是记录全部线段 若两条线段长度相等且中点重合 这两条线段就能够成为矩形的对角线 于是我们找到全部n*(n-1)/2条线 ...

  3. 【bzoj2338】[HNOI2011]数矩形 计算几何

    题目描述 题解 计算几何 由于对角线平分且相等的四边形是矩形,因此我们可以把每条对角线存起来,按照对角线长度和中点位置为关键字排序,这样对于每个相同长度和中点的对角线就排到了一起. 于是对于每段可能形 ...

  4. 【题解】Luogu P3217 [HNOI2011]数矩形

    原题链接:P3217 [HNOI2011]数矩形 什么??!怎么又是计算几何,您钛毒瘤了-- 这道题真的是毒瘤 凸包?旋转卡壳? 看一下数据,N<=1500? 暴力 没错,就是暴力,N^2没毛病 ...

  5. 【BZOJ2338】[HNOI2011]数矩形 几何

    [BZOJ2338][HNOI2011]数矩形 题解:比较直观的做法就是枚举对角线,两个对角线能构成矩形当且仅当它们的长度和中点相同,然后用到结论:n个点构成的矩形不超过n^2.5个(不会证),所以两 ...

  6. 【BZOJ2338】【HNOI2011】数矩形 [计算几何]

    数矩形 Time Limit: 20 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 最近某歌手在研究自己的全国巡回演出, ...

  7. luogu P3217 [HNOI2011]数矩形

    LINK:数矩形 题意:给出n个点 求出一个最大的矩形. 矩形可以使斜着的.(不会告诉你样例我算了几年 这道题的一个潜规则 矩形面积都是整数 我也不知道为啥一定是整数 姑且是题目输出的要求吧. 所以用 ...

  8. 2338: [HNOI2011]数矩形 - BZOJ

    因为已经看了一眼题解,知道是算中点和长度,相同时构成一个矩形,所以就把所有的线段算出来,然后排序,相同的就更新答案 为了避免误差,我们都用整数存,中点直接相加就行了,没必要除2,长度也只要平方就行了, ...

  9. 【计算几何】bzoj2338 [HNOI2011]数矩形

    对于两条线段,若其中点重合,且长度相等,那么它们一定是某个矩形的对角线. N*N地处理出所有线段,排序,对每一部分中点重合.长度相等的线段进行暴力枚举,更新答案. 用 long double 注意EP ...

随机推荐

  1. 【洛谷 p3382】模板-三分法(算法效率)

    题目:给出一个N次函数,保证在范围[l,r]内存在一点x,使得[l,x]上单调增,[x,r]上单调减.试求出x的值. 解法:与二分法枚举中点使区间分成2份不一样,三分法是枚举三分点,再根据题目的情况修 ...

  2. Laravel Predis Error while reading line from the server.

    问题 Laravel说明文档中的 Redis 发布与订阅案例,命令行运行php artisan redis:subscribe 到60s自动断开并报错 [Predis\Connection\Conne ...

  3. ruby on rails 2.3+的版本不再支持cgi

    ruby on rails 2.3+的版本不再支持cgi了,恶心到了,换其他框架,看了款cramp,完全没资料,完全不让人入门 操蛋的厉害,ruby果然是小众的窝里乐,放弃使用

  4. Python函数:一个简单的迭代

    #!/usr/bin/env python # -*- coding: utf-8 -*- def fact(n): if n == 1 : return 1 return n * fact(n-1) ...

  5. Android5.0新特性——兼容性(support)

    兼容性 虽然Material Design新增了许多新特性,但是并不是所有新内容对对下保持了兼容. 使用v7包 v7 support libraries r21 及更高版本包含了以下Material ...

  6. [TypeScript] TypeScript对象转JSON字符串范例

    [TypeScript] TypeScript对象转JSON字符串范例 Playground http://tinyurl.com/njbrnrv Samples class DataTable { ...

  7. 使用svcutil.exe 工具来生成调用文件

    svcutil.exe http://localhost:9065/ServiceDemo.svc?wsdl 这将生成一个配置文件和一个包含客户端类的代码文件. 下面我们就用这个是怎么生成的: 1,打 ...

  8. python初识(2)

    1.关于编码转换的方式. 比如,讲utf-8的编码转换为unicode方式如下 #-*- coding:utf-8 -*- i="德玛西亚" i_unicode=i_decode( ...

  9. js阻塞

    阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪),JS单线程避免阻塞方法: 1.sleep()方法:sleep()允许指定以毫秒为单位的一段时间作为参数,使得线程在指定的时间内进入阻塞状 ...

  10. JAVA基础学习day24--Socket基础一UDP与TCP的基本使用

    一.网络模型 1.1.OIS参考模型 1.2.TCP/IP参考模型 1.3.网络通讯要素 IP地址:IPV4/IPV6 端口号:0-65535,一般0-1024,都被系统占用,mysql:3306,o ...