思路: 枚举3个点,计算第4个点并判断是否存在,复杂度为O(N3logN)或O(N3α) 考虑矩形的对角线,两条对角线可以构成一个矩形,它们的长度和中点必须完全一样,于是将所有线段按长度和中点排序,那么所有可能构成矩形的线段(对角线)一定在连续的区间内,顺序枚举即可,复杂度O(N2logN). 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37…
2338: [HNOI2011]数矩形 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1535  Solved: 693[Submit][Status][Discuss] Description Input   Output   Sample Input   Sample Output   HINT   Source Day2 我开始想着记每条线的斜率,然后排序来找平行线,但却不能保证构成矩形.一种新奇的思路:记录对角线,两条对角线长度相等且中点…
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2338 中学数学老师告诉我们,一个矩形的两条对角线相等,所以只要把所有的边拿出来,记录下中点坐标及长度,然后排一遍序扫一遍更新答案..(听说开double会炸? #include<cstring> #include<cstdio> #include<algorithm> #include<cmath> #include<iostream> #i…
对于两条线段,若其中点重合,且长度相等,那么它们一定是某个矩形的对角线. N*N地处理出所有线段,排序,对每一部分中点重合.长度相等的线段进行暴力枚举,更新答案. 用 long double 注意EPS的设置,卡精度. 注意数组大小的设置,容易MLE. #include<cstdio> #include<algorithm> #include<cmath> #include<iostream> using namespace std; #define EPS…
[BZOJ2338][HNOI2011]数矩形 题解:比较直观的做法就是枚举对角线,两个对角线能构成矩形当且仅当它们的长度和中点相同,然后用到结论:n个点构成的矩形不超过n^2.5个(不会证),所以两两枚举对角线即可. #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; typedef long long ll;…
题目链接: 2338: [HNOI2011]数矩形 Time Limit: 20 Sec  Memory Limit: 128 MB Description Input   Output 题意: 思路: 求最大的矩形面积,先把这些点转化成线段,记录下线段的长度和中点和两个端点,形成矩形说明对角线长度相等,且共中点,所以把线段按长度和中点排序,如果都相等,然后用三角形的三个顶点坐标计算面积的公式计算最大面积就好了; AC代码: /**********************************…
原题链接:P3217 [HNOI2011]数矩形 什么??!怎么又是计算几何,您钛毒瘤了-- 这道题真的是毒瘤 凸包?旋转卡壳? 看一下数据,N<=1500? 暴力 没错,就是暴力,N^2没毛病 枚举任意两个点,计算距离和连成线段的中点,这些线段作为矩形的对角线 矩形对角线长度相等,互相平分 所以--给线段排序 cmp先按线段长度排序,再按中点坐标排序 最后暴力统计 end 上代码 记得要用long long #pragma GCC optimize("O3") #include…
个人亲自编写.测试,可以正常使用   道理看原文,这里不多说   网上找到的几篇基本都不能用的   C#代码 bool Equal(float f1, float f2) { return (Math.Abs(f1 - f2) < 1f); } bool dayu(Point p1, Point p2)////比较两点坐标大小,先比较x坐标,若相同则比较y坐标 { return (p1.X > p2.X || (Equal(p1.X , p2.X) && p1.Y > p…
//给⼀组组数,仅仅有两个数仅仅出现了一次.其它全部数都是成对出现的,找出这两个数. #include <stdio.h> int find_one_pos(int num) //找一个为为1的位置 { int n = 0; while(num) { if (num & 1 == 1) break; else { n++; num >>= 1; } } return n; } void find_two_differ(int arr[], int len, int *num…
Transmitters Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4955   Accepted: 2624 Description In a wireless network with multiple transmitters sending on the same frequencies, it is often a requirement that signals don't overlap, or at…