矩形面积

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 97    Accepted Submission(s): 55

Problem Description
小度熊有一个桌面,小度熊剪了很多矩形放在桌面上,小度熊想知道能把这些矩形包围起来的面积最小的矩形的面积是多少。
Input
第一行一个正整数 T,代表测试数据组数(1≤T≤20),接下来 T 组测试数据。

每组测试数据占若干行,第一行一个正整数 N(1≤N<≤1000),代表矩形的数量。接下来 N 行,每行 8 个整数x1,y1,x2,y2,x3,y3,x4,y4,代表矩形的四个点坐标,坐标绝对值不会超过10000。

Output
对于每组测试数据,输出两行:

第一行输出"Case #i:",i 代表第 i 组测试数据。
第二行包含1 个数字,代表面积最小的矩形的面积,结果保留到整数位。

Sample Input
2 2 5 10 5 8 3 10 3 8 8 8 8 6 7 8 7 6 1 0 0 2 2 2 0 0 2
Sample Output
Case #1: 17 Case #2: 4
Source
2015年百度之星程序设计大赛 - 初赛(1)
源地址:http://www.cnblogs.com/jie-dcai/p/3893278.html
题目实际上就是给你很多的点,要求最小的外接矩形。(面积最小),凸包,旋转卡壳即可,算是模板题,UVA10137是差不多的题目。
代码:
//旋转卡壳,百度之星初赛最后一题#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define min(x,y) ((x)<(y)?(x):(y))
using namespace std;struct point
{double x,y;
}p[10005];int ans[10005],st[10005],stop,cnt,n;int DB (double d){if (fabs(d)<1e-8)return 0;return d>0?1:-1;
}
double cross (point a,point b,point c){return (a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y);
}
double dot(point a,point b,point c){return (a.x-c.x)*(b.x-c.x)+(a.y-c.y)*(b.y-c.y);
}
bool cmp(point A,point B){if(A.y<B.y) return true;else if(A.y==B.y){if(A.x<B.x)return true;}return false;
}void forTU(){stop=cnt=0;st[stop++]=0; st[stop++]=1;for(int i=2;i<n;i++){while(stop>1&&cross(p[i],p[st[stop-1]],p[st[stop-2]])>=0) stop--;st[stop++]=i;}for(int i=0;i<stop;i++)ans[cnt++]=st[i];stop=0; st[stop++]=n-1; st[stop++]=n-2;for(int i=n-3;i>=0;i--){while(stop>1&&cross(p[i],p[st[stop-1]],p[st[stop-2]])>=0) stop--;st[stop++]=i;}for(int i=1;i<stop;i++){ans[cnt++]=st[i];}
}double roating(){cnt--;if(n<3) return 0;int i,m=1,q=1,r;double anst=1e10,a,b,c;for(i=0;i<cnt;i++){while (DB(cross(p[ans[(i+1)]],p[ans[(m+1)]],p[ans[i]])-cross(p[ans[(i+1)]],p[ans[m]],p[ans[i]])) >0)m=(m+1)%cnt;while (DB(dot(p[ans[(q+1)]],p[ans[(i+1)]],p[ans[i]])-dot(p[ans[q]],p[ans[(i+1)]],p[ans[i]])) >0)q=(q+1)%cnt;if (i==0)r=q;while(DB(dot(p[ans[(r+1)]],p[ans[(i+1)]],p[ans[i]])-dot(p[ans[r]],p[ans[(i+1)]],p[ans[i]])) <= 0)r=(r+1)%cnt;a=cross(p[ans[(i+1)]],p[ans[m]],p[ans[i]]);b=dot(p[ans[q]],p[ans[(i+1)]],p[ans[i]])-dot(p[ans[r]],p[ans[(i+1)]],p[ans[i]]);c=dot(p[ans[(i+1)]],p[ans[(i+1)]],p[ans[i]]);anst=min(anst,a*b/c);}return anst;
}int main (){
int number;
cin>>number;
for(int numm=1;numm<=number;numm++){  cin>>n;n*=4;cout<<"Case #"<<numm<<":"<<endl;for (int i=0;i<n;i++)scanf("%lf%lf",&p[i].x,&p[i].y);sort(p,p+n,cmp);  forTU(); printf("%.0lf\n",roating()); } return 0;
}

2015百度之星初赛(1)1006 旋转卡壳相关推荐

  1. 二分搜索 2015百度之星初赛1 HDOJ 5248 序列变换

    题目传送门 1 /* 2 二分搜索:在0-1e6的范围找到最小的max (ai - bi),也就是使得p + 1 <= a[i] + c or a[i] - c 3 比赛时以为是贪心,榨干智商也 ...

  2. 2017百度之星初赛(B)1006小小粉丝度度熊------hdu6119

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=6119 分析: 我们一看到这题呢,因为题目明确告诉我们有重叠,所以我们肯定要先排序预处理下啦,然后呢, ...

  3. [水]2015百度之星初赛第一场 超级赛亚ACMer

    Description 百小度是一个ACMer,也是一个超级赛亚人,每个ACMer都有一个战斗力,包括百小度.
所谓超级赛亚人的定义,是说如果在对抗中刚好接近极限状态,那就会激发斗志,实力提升.
 具 ...

  4. 2015 百度之星 初赛1 1001(贪心)

     Problem Description 百小度是一个ACMer,也是一个超级赛亚人,每个ACMer都有一个战斗力,包括百小度.
所谓超级赛亚人的定义,是说如果在对抗中刚好接近极限状态,那就会激发 ...

  5. 2016百度之星 - 初赛(Astar Round2B)解题报告

    此文章可以使用目录功能哟↑(点击上方[+]) 被自己蠢哭,去年还能进一下复赛,今年复赛都没戏了... 链接→2016"百度之星" - 初赛(Astar Round2B)  Prob ...

  6. 2016百度之星 - 初赛(Astar Round2A)解题报告

    此文章可以使用目录功能哟↑(点击上方[+]) 有点智商捉急,第一题卡了好久,看来不服老,不服笨是不行的了...以下是本人目前的题解,有什么疑问欢迎提出 链接→2016"百度之星" ...

  7. 2021百度之星初赛第一场部分题解

    写在前面 几个家长要求我写一些2021百度之星初赛第一场的题解. 1003 鸽子 原题链接 https://acm.hdu.edu.cn/showproblem.php?pid=6998 http:/ ...

  8. 字符串处理 2015百度之星资格赛 1002 列变位法解密

    题目传送门 1 /* 2 字符串处理:要求解码,然而二维数组开不下,可以直接输出 3 只要在余数的地方判断一下就行了,vector的效率不高 4 另外:感觉麻烦的地方应该纸上写写就清楚了 5 */ 6 ...

  9. 2021百度之星初赛二(1001 -- 1003)

    2021百度之星初赛二(1001 – 1003) 1001 题意: 给 a,b,每次 a,b会变为 a+b,a-b,问 k 次之后变成了哪两个数,对 998244353998244353 取模,多组数 ...

最新文章

  1. solaris 中挂载usb移动硬盘
  2. .NET Core 3.0 特性初探:C# 8、WPF、Windows Forms、EF Core
  3. 深度学习(三)之LSTM写诗
  4. Java实训项目5:GUI学生信息管理系统 - 实现步骤 - 创建数据库与表
  5. VS 2013 Chrome PPAPI 开发环境
  6. 零基础入门语义分割——Task1 赛题理解
  7. sum problem
  8. 服务器硬盘一直亮红灯怎么回事,请问:电脑的硬盘为何一直亮着红灯?且硬盘很 – 手机爱问...
  9. 本特利177230-00-01-CN
  10. 人工晶状体在线公式A常数优化——多线程
  11. 付永刚计算机信息安全技术课后答案
  12. 2022.11.2 英语背诵
  13. mp4视频文件损坏的修复方法
  14. 计算机安全的基本要求是什恶魔,公考面试真题:2018年3月17日银监会(计算机岗)面试真题1...
  15. linux 输出到文件 新,如何将Linux命令输出保存到文件的两种方法
  16. 快速搞明白公网和私网的区别(组建私网的网络号)
  17. 切换上下首音乐功能的实现(消息订阅与发布的使用)
  18. linux字体配置要略,Linux字体配置要略.pdf
  19. 杰理之KeyPage【篇】
  20. MySQL数据库的四种登录方式

热门文章

  1. 数据结构考研:数据、数据元素、数据项、数据对象、数据结构的区别/详细解释(计算机/软件工程/王道论坛)
  2. 在idea中如何导入一个已有的项目
  3. FPGA通信第二篇--UDP
  4. 怎样使用阿里云国际版ecs实例创建单个云盘快照-Unirech
  5. 查看Mysql 数据库所有表的数据量
  6. Python中的循环语句
  7. 一文彻底读懂三极管的工作原理,最通俗的解释,看完就明白了!
  8. H3Cmsr830 l2tp二层隧道协议配置详解(host-R版)
  9. 手工编程铣加工视频教程 铣代码讲解
  10. 【element-plus】el-dialog距离顶部的高度