首页 > 其他分享 >旋转卡壳

旋转卡壳

时间:2023-08-19 20:47:01浏览次数:32  
标签:ch int double 旋转 ## 卡壳 size op

Smiling & Weeping

                ---- 一个能升起月亮的身体,必然驮住了无数次日落

题目链接:https://www.luogu.com.cn/problem/P1452

题目简介:

# [USACO03FALL] Beauty Contest G /【模板】旋转卡壳

## 题目描述

给定平面上 $n$ 个点,求凸包直径。

## 输入格式

第一行一个正整数 $n$。
接下来 $n$ 行,每行两个整数 $x,y$,表示一个点的坐标。

## 输出格式

输出一行一个整数,表示答案的平方。

## 样例 #1

### 样例输入 #1

```
4
0 0
0 1
1 1
1 0
```

### 样例输出 #1

```
2
```

## 提示

【数据范围】
对于 $100\%$ 的数据,$2\le n \le 50000$,$|x|,|y| \le 10^4$。

Talk is cheap , show me the code

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N = 1e5+1;
 4 const double eps=1e-6;
 5 int n;
 6 int sgn(double x){
 7     if(fabs(x)<eps) return 0;
 8     else
 9         return x<0 ? -1 : 1;
10 }
11 struct Point{
12     double x , y;
13     Point() {}
14     Point(double x , double y) : x(x),y(y) {}
15     Point operator + (Point b) {return Point(x+b.x , y+b.y); }
16     Point operator - (Point b) {return Point(x-b.x , y-b.y); }
17     bool operator == (Point b) {return sgn(x-b.x)==0 && sgn(y-b.y)==0; }
18     bool operator < (const Point& b){
19         return sgn(x-b.x)<0 || (sgn(x-b.x)==0 && sgn(y-b.y)<0);
20     }
21 };
22 typedef Point Vector;
23 double Cross(Vector a , Vector b){
24     return a.x*b.y-a.y*b.x;
25 }
26 vector<Point> v;        // 存所有点,并进行从小到大排序
27 double line[N],ptr=0;   // 保存半个凸壳的路径
28 vector<Point> hull;     // 保存完整凸壳的路径
29 Point p[N],ch[N];
30 int convex() // 求凸壳
31 {
32     sort(p,p+n);
33     n = unique(p,p+n)-p;
34     int u=0;
35     for(int i = 0; i < n; i++){
36         while(u>1 && sgn(Cross(ch[u-1]-ch[u-2] , p[i]-ch[u-1]))<=0)
37             u--;
38         ch[u++]=p[i];
39     }
40     int j = u;
41     for(int i = n-2; i >= 0; i--){
42         while(u>j && sgn(Cross(ch[u-1]-ch[u-2],p[i]-ch[u-1]))<=0)
43             u--;
44         ch[u++]=p[i];
45     }
46     if(n>1) u--;
47     return u;
48 }
49 double Distance(Point& a , Point& b){
50     return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
51 }
52 double rotateCalipers(int len){
53     double ans = -1;
54     int size = len;
55     int op = 1; // 对面的点,逆时针沿凸包移动
56     Point p1,p2;
57     for(int i = 0; i < size; i++){
58         p1 = ch[i]; p2 = ch[(i+1)%size];
59         while(Cross(p2-ch[(op+1)%size],p1-ch[(op+1)%size]) < Cross(p2-ch[op] , p1-ch[op]))
60             op = (op+1)%size;
61         ans = max(ans , max(Distance(p1 , ch[op]) , Distance(p2 , ch[op])));
62     }
63     return ans;
64 }
65 int main()
66 {
67     double x,y;
68     scanf("%d",&n);
69     for(int i = 0; i < n; i++){
70         scanf("%lf %lf",&x,&y);
71         p[i] = Point(x,y);
72     }
73     int len = convex();
74     printf("%d\n",(int)rotateCalipers(len));
75     return 0;
76 }

                        借我一个暮年,

                         借我碎片,

                    借我踌躇满志,借我一生有梦

文章到此结束,我们下次再见

标签:ch,int,double,旋转,##,卡壳,size,op
From: https://www.cnblogs.com/smiling-weeping-zhr/p/17643075.html

相关文章

  • 旋转矩阵与欧拉角
    旋转矩阵与欧拉角参考文献:[ComputingEuleranglesfromarotationmatrix——GregoryG.Slabaugh]三个主轴的旋转矩阵右手坐标系,逆时针转动角度为正(右手螺旋定则确定)。关于绕\(x\)轴旋转\(\psi\)弧度的主动旋转定义为\[R_x(\psi)=\begin{bmatrix}......
  • 旋转矩阵
    目录旋转的表示旋转向量与旋转矩阵之间的变换旋转向量变成旋转矩阵旋转矩阵变为旋转向量左右手坐标系确定及其旋转正向旋转的表示在三维坐标系中,有三种表达形式旋转矩阵\[R=\begin{bmatrix}r_{11}&r_{12}&r_{13}\\r_{21}&r_{22}&r_{......
  • 平面或空间中任意点的旋转
    平面或空间中任意点的旋转自己琢磨出来的。若有错误请指出。谢谢!1.旋转2D假设平面上有一个点\(P(x,y)\),旋转任意角度\(\beta\),求旋转后的点\(P'(x',y')\)。设平面坐标系上有一个半径为\(r\)的圆,圆心位于原点\(O\)。圆与\(x\)轴正坐标的交点为\(P_0(x_0,y_0)\)。\[P_0=......
  • 骚操作:使用RxJava实现ImageView的拖动、旋转和缩放
    本文介绍一种使用Rxjava实现图片交互操作的方法。支持单指拖动,双指旋转缩放,效果如下:自定义View首先自定义TrsImageView继承ImageView,设置ScaleType为Matrix,我们使用矩阵计算最终的translate,rotate和scale。publicclassTrsImageViewextendsImageView{publicTrsImageVi......
  • 小程序中实现图片旋转后保存
    嫌麻烦的可以直接点击小程序代码片段体验,下面是代码:<imagesrc="https://qcloudimg.tencent-cloud.cn/raw/7ff4215737d7877346c0ec6ea1514d94.jpg"mode="widthFix"style="width:100vw;"/><pickermode="selector"range=&qu......
  • 父子关系旋转应用
    想要让这个转起来,直接设置摄像机不是很好可以设置一个空对象,然后把摄像机的父级设置为空对象把空对象的3D属性打开,修改Y值旋转的时候,摄像机也会跟着旋转......
  • 【验证码逆向专栏】最新某度旋转验证码 v2 逆向分析
    声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作......
  • 代码随想录算法训练营第七天|力扣334.反转字符串、力扣541.反转字符串II、剑指offer05
    字符串反转字符串(力扣344.)如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。毕竟面试官一定不是考察你对库函数的熟悉程度,如果使用python和java的同学更需要注意这一点,因为python、java提供的库函数十分丰富。如果库函数仅仅是解题过程中的一小部分,并且......
  • 二维数组花式遍历(旋转,螺旋) [labuladong-刷题打卡 day5]
    矩阵旋转48.旋转图像难点主要在于:用翻转和镜像处理逆反和旋转,和逆转单词一样“难者不会,会者不难”,思路简单镜像的坐标对应关系处理语言特性的利用,不同语言有不同api,实际代码中会有很大不同,但思想一致如果确定矩阵维数,通过线性代数应该可以直接计算答案...classSolution......
  • LeetCode 热题 100 之 48. 旋转图像
    题目给定一个n×n的二维矩阵matrix表示一个图像。请你将图像顺时针旋转90度。你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。提示:n==matrix.length==matrix[i].length1<=n<=20-1000<=matrix[i][j]<=......