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 called it M11. It has only one eye on the left side of its head and just three
feet all on the right side of its body and suffers from three walking limitations:

  1. It can not turn right due to its special body structure.
  2. It leaves a red path while walking.
  3. It hates to pass over a previously red colored path, and never does that.

The pictures transmitted by the Discovery space ship depicts that plants in the Y1999 grow in special points on the planet. Analysis of several thousands of the pictures have resulted in discovering a magic coordinate system governing the grow points of the
plants. In this coordinate system with x and y axes, no two plants share the same x or y.

An M11 needs to eat exactly one plant in each day to stay alive. When it eats one plant, it remains there for the rest of the day with no move. Next day, it looks for another plant to go there and eat it. If it can not reach any other plant it dies by the end
of the day. Notice that it can reach a plant in any distance.

The problem is to find a path for an M11 to let it live longest.

Input is a set of (x, y) coordinates of plants. Suppose A with the coordinates (xA, yA) is the plant with the least y-coordinate. M11 starts from point (0,yA) heading towards plant A. Notice that the solution path should not cross itself and all of the turns
should be counter-clockwise. Also note that the solution may visit more than two plants located on a same straight line.

Input

The first line of the input is M, the number of test cases to be solved (1 <= M <= 10). For each test case, the first line is N, the number of plants in that test case (1 <= N <= 50), followed by N lines for each plant data. Each
plant data consists of three integers: the first number is the unique plant index (1..N), followed by two positive integers x and y representing the coordinates of the plant. Plants are sorted by the increasing order on their indices in the input file. Suppose
that the values of coordinates are at most 100.

Output

Output should have one separate line for the solution of each test case. A solution is the number of plants on the solution path, followed by the indices of visiting plants in the path in the order of their visits.

Sample Input

2
10
1 4 5
2 9 8
3 5 9
4 1 7
5 3 2
6 6 3
7 10 10
8 8 1
9 2 4
10 7 6
14
1 6 11
2 11 9
3 8 7
4 12 8
5 9 20
6 3 2
7 1 6
8 2 13
9 15 1
10 14 17
11 13 19
12 5 18
13 7 3
14 10 16

Sample Output

10 8 7 3 4 9 5 6 2 1 10
14 9 10 11 5 12 8 7 6 13 4 14 1 3 2

Source

Tehran 1999

一只蚂蚁,只会向左转,现在给出平面上很多个点,求解一种走法,能使得蚂蚁能经过的点最多,每个顶点该蚂蚁只能经过一次,且所行走的路线不能发生交叉.

对于题目所输入的点,先找出最左下方的顶点(即纵坐标最小的顶点),然后对剩下的顶点按照对与左下点的极角排序,然后反复找最左下的点,反复进行极角排序,同时记录排序后左下的顶点.

#include<map>
#include<string>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<vector>
#include<iostream>
#include<algorithm>
#include<bitset>
#include<climits>
#include<list>
#include<iomanip>
#include<stack>
#include<set>
using namespace std;
struct point
{
	int x,y,id;
	point(){}
	point(int x,int y)
	{
		this->x=x;
		this->y=y;
	}
	point operator -(point one)
	{
		return point(x-one.x,y-one.y);
	}
	int operator *(point one)
	{
		return x*one.y-y*one.x;
	}
}box[60];
point o;
int dis2(point one,point two)
{
	return (one.x-two.x)*(one.x-two.x)+(one.y-two.y)*(one.y-two.y);
}
bool cmp(point one,point two)
{
	return (one-o)*(two-o)==0?dis2(o,one)>dis2(o,two):(one-o)*(two-o)>0;
}
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int n;
		cin>>n;
		for(int i=0;i<n;i++)
		{
			cin>>box[i].id>>box[i].x>>box[i].y;
			if(box[i].y<box[0].y)
				swap(box[i],box[0]);
		}
		vector<int>ans;
		for(int i=0;i<n;i++)
		{
			ans.push_back(box[i].id);
			o=box[i];
			if(i+1<n)
				sort(box+i+1,box+n,cmp);
		}
		cout<<ans.size();
		for(int i=0;i<ans.size();i++)
			cout<<" "<<ans[i];
		cout<<endl;
	}
}

时间: 2024-10-27 09:29:12

poj1696Space Ant的相关文章

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

jmeter+ant+jenkins+mac报告优化

一.在上篇博客中生成的报告有两个问题: 1.date not defined 2.Min Time和Max Time显示成了NaN 二.Jmeter+Ant报告生成原理: 在解决问题之前,让我们先弄清楚Jmeter+Ant是生成报告的原理,知道原理后我们就可以很从容的解决问题了.另外,如果后续我们想定制报告也就很容易了. 1.在Jmeter的extras目录下,官方已经为我们提供了一个现成的实例,我们只需要在该目录下执行ant命令就可以生成一个数据文件Test.jtl和一个报告Test.html

Ant: Class not found: javac1.8

今天用ant,在选择build.xml,run as ant build后出错Ant: Class not found: javac1.8 分析问题:是否是eclipse中的ant版本和java的版本不匹配那? 解决方法如下: 1. 去下载一个最新版本的ant,解压到本地相应目录下,我下载的是apache-ant-1.9.7 2. 在eclipse中, windows-  references---Ant  ----run time,点击Ant home, 将路径制定到下载的ant目录下 3.

Maven和Ant的区别

最近做的项目中一直是在使用maven,但是要知道最早出来的构建工具是Ant,现在Ant依然有好多人再用,于是自己就抽出来时间,学习了一下Ant的基本的使用.这样也能跟好的理解Maven提供的新特性. 首先说一下他们各自的作用: Ant的作用:是一种基于Java的build工具 可以用ant编译java类,生成class文件 ant可以自定义标签.配置文件,用于构建. ant可以把相关层构建成jar包 . ant把整个项目生成web包,并发布到Tomcat Ant的优点: 跨平台性:Ant是纯Ja

Ant入门教程之部署Java项目

Ant可以代替使用javac.java和jar等命令来执行java操作,从而达到轻松的构建和部署Java工程的目的. 1.利用ant的javac命令来编译Java程序 Ant的javac命令用于实现编译Java程序的功能.下面来看一个简单的例子:首先我们建立名为 JavaPro的Java项目, 建立src目录为源代码目录,在src目录下建立TestAnt.java这个类文件.该类文件的内容如下: package com.home; public class TestAnt{ public sta

ant编译后用hadoop报Could not find or load main class

错误信息: [[email protected] HDFS_Java_API]$ hadoop HDFSJavaAPI.jar HDFSJavaAPIDemo Warning: $HADOOP_HOME is deprecated. Error: Could not find or load main class HDFSJavaAPI.jar 报错原因: 当前运行的 .class  文件不在 hadoop-env.sh文件中 解决办法: 在 hadoop-env.sh中配置HADOOP_CLA

ant完成文件上传和启动服务

首先,请先下载JAR包.Ant上传文件到Linux服务器使用scp,需要下载jar包jsch.jar,将jar包放入ant的lib文件夹下. <?xml version="1.0" ?> <project name="${project.name}" default="start-server" basedir="."> <property name="password" va

使用Ant打包Android应用具体解释

计划写个完整的使用Ant打包Android应用的系列文章.三篇文章.首篇具体介绍採用Ant打包Android应用的流程.列出部分定制问题及其解决方法,第二篇介绍我理解的Ant打包的思路与主要的概念和使用,最后一篇描写叙述apk包的生成过程. 实现的环境: 操作系统:ubuntu 64bit 14.04 Android SDK Build Tools:22.0.1 Android SDK Tools:24.3.3 Ant:1.9.4 ProGuard:5.2.1 JDK:1.7 一.简单应用出包流

Ant Design of React的安装和使用方法

在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,给设计师和工程师带来很多困扰和重复建设,大大降低了产品的研发效率.我们(蚂蚁金服体验技术部)经过大量的项目实践和总结,沉淀出一个中台设计语言 Ant Design.旨在统一中台项目的前端 UI 设计,屏蔽不必要的设计差异和实现成本,解放设计和前端的研发资源. Ant Design 是一个致力于提升『用户』和『设计者』使用体验的中台设计语言.它模糊了产品经理.交互设计师.视觉设计师.前端工程师.开发工程师等