poj1696Space Ant(逆时针螺旋形)

链接

贪心做法,没次找最外面的点,也就是相对前面那条线偏转角度最小的点,除第一个点需要找到最下面的点即Y坐标最小,其余的每次进行极角排序。

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<stdlib.h>
 6 #include<vector>
 7 #include<cmath>
 8 #include<queue>
 9 #include<set>
10 using namespace std;
11 #define N 55
12 #define LL long long
13 #define INF 0xfffffff
14 const double eps = 1e-8;
15 const double pi = acos(-1.0);
16 const double inf = ~0u>>2;
17 int o[55];
18 struct Point
19 {
20     int x,y;
21     Point(double x=0,double y=0):x(x),y(y) {}
22     int id;
23 }p[N];
24 int cc;
25 typedef Point pointt;
26 pointt operator + (Point a,Point b)
27 {
28     return Point(a.x+b.x,a.y+b.y);
29 }
30 pointt operator - (Point a,Point b)
31 {
32     return Point(a.x-b.x,a.y-b.y);
33 }
34 double dis(Point a)
35 {
36     return sqrt(1.0*a.x*a.x+a.y*a.y);
37 }
38 int cross(Point a,Point b)
39 {
40     return a.x*b.y-a.y*b.x;
41 }
42 int mul(Point p0,Point p1,Point p2)
43 {
44     return cross(p1-p0,p2-p0);
45 }
46
47 bool cmp(Point a,Point b)
48 {
49     if(mul(p[cc],a,b)==0)
50         return dis(a-p[cc])<dis(b-p[1]);
51     else
52         return mul(p[cc],a,b)>0;
53 }
54 int main()
55 {
56     int t,i,n;
57     cin>>t;
58     while(t--)
59     {
60         scanf("%d",&n);
61         for(i = 1; i <= n ;i++)
62         {
63             scanf("%d%d%d",&p[i].id,&p[i].x,&p[i].y);
64         }
65         int tmp = 1;
66         for(i = 2; i <= n; i++)
67         if(p[tmp].y>p[i].y)
68         {
69             tmp = i;
70         }
71         swap(p[1],p[tmp]);
72         int g = 0;
73         o[++g] = p[1].id;
74         cc = 1;
75         for(i = 2 ;i <= n; i++)
76         {
77             sort(p+i,p+n+1,cmp);
78             o[++g] = p[i].id;
79             cc = i;
80         }
81         printf("%d",g);
82         for(i = 1 ;i <= g;  i++)
83         printf(" %d",o[i]);
84         puts("");
85     }
86     return 0;
87 }

poj1696Space Ant(逆时针螺旋形),布布扣,bubuko.com

时间: 2024-08-09 10:41:10

poj1696Space Ant(逆时针螺旋形)的相关文章

顺时针和逆时针螺旋打印二维数组(行列式)

一.要求: 行列式,行和宽不一定相等,要求顺时针螺旋打印每一个元素,所谓顺时针螺旋即: 第一圈:从第一行第一列元素开始,先从左到右打印第一行所有元素,接着打印最后一剩余列元素,再从右到左打印最后一行剩余元素,接着从下到上打印第一列剩余元素 第二圈:从第二行第二列开始,按上面的顺时针顺序打印一圈元素 ...,一圈圈反复,直到把所有元素无重复的打印完. 逆时针螺旋与上面的顺序刚好相反. 二.分析: 顺时针螺旋打印可以将问题分割为:先按顺时针打印第一圈,再按顺时针打印第二圈,其中每圈又分四个步骤:从左

螺旋式上升,螺旋形理论

这个世界没有任何一条线是直线 周期性 事物的发展或进步不是直线式上升,而是类似于"螺旋"般上升. 谈谈怎样理解否定之否定规律 否定之否定规律是唯物辩证法的基本规律之一.革命导师都非常重视这一规律.但是,目前我国的一般哲学教科书中,对于否定之否定规律的阐述,学后使人感到茫然,不得要领,难以应用.因此,否定之否定规律至今仍被禁锢于哲学殿堂之内,无法成为普通群众手中的认识工具. 内容是事物存在的基础.事物的发展,主要是事物内容的发展.而形式则要适应于.服从于内容发展的需要.在事物的发展过程中

poj1696Space Ant

Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3316   Accepted: 2118 Description The most exciting space discovery occurred at the end of the 20th century. In 1999, scientists traced down an ant-like creature in the planet Y1999 and cal

螺旋形打印矩阵

package 矩阵1; public class JuZheng { public static void main(String args[]) { int n = 5; int m = 0; int k = 0; int[][] a = new int[n][n]; if (n % 2 == 0) { m = n; } else { m = n / 2 + 1; } for (int i = 0; i < m; i++) { for (int j = i; j < n - i; j++)

c++ matrix逆时针螺旋

题目 输入:3 输入: 5 4 3 6 1 2 7 8 9 AC代码 #include <iostream> using namespace std; int a[101][101]; int main() { memset(a,0,sizeof(a)); int n; cin>>n; for(int i=1;i<=n;i++) { a[0][i]=a[i][0]=a[n+1][i]=a[i][n+1]=1; } int x=n,y=n,p=n*n; while(p>=

AutoCAD中的螺旋究竟是什么螺旋?

AutoCad从很早的时候就开始提供了螺旋线的功能,它的用法相对简单,非常适合用来对等距螺旋的理论进行演练. 选择螺旋线工具,首先画出一个基准圆,再向内(或向外)移动鼠标,拖出一个旋转3个周期的螺旋. Autocad中把螺旋的起点称作底面半径,结束点称为顶面半径(这里的螺旋功能是可以画三维螺旋的).拖动底面半径的起点时,螺旋整体会变化.拖动顶面半径时,底面半径是固定不变的.因此,在使用时,应尽量先指定好底面半径,之后调整顶面半径来控制螺旋的大小. 从螺旋的特征来看,在这三个旋转周期中,每一个周期

杭电ACM分类

杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索1006 Redraiment猜想 数论:容斥定理1007 童年生活二三事 递推题1008 University 简单hash1009 目标柏林 简单模拟题1010 Rails 模拟题(堆栈)1011 Box of Bricks 简单题1012 IMMEDIATE DECODABILITY

【转】对于杭电OJ题目的分类

[好像博客园不能直接转载,所以我复制过来了..] 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索1006 Redraiment猜想 数论:容斥定理1007 童年生活二三事 递推题1008 University 简单hash1009 目标柏林 简单模拟题1010 Rails 模拟题(堆栈)1011 Box of Bricks 简单题1012 IMMEDI

转载:hdu 题目分类 (侵删)

转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029. 1032.1037.1040.1048.1056.1058.1061.1070.1076.1089.1090.1091.1092.1093. 1094.1095.1096.1097.1098.1106.1108.1157.116