#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
double eps=1e-8;
int sgn(double x)
{
if(fabs(x)<=eps)return 0;
if(x<0)return -1;
return 1;
}
struct Point
{
double x,y;
int index;
Point (){}
Point(double _x,double _y)
{
x=_x;
y=_y;
}
Point operator -(const Point &b)const
{
return Point(x-b.x,y-b.y);
}
double operator *(const Point &b)const
{
return x*b.x+y*b.y;
}
double operator ^(const Point &b)const
{
return x*b.y-y*b.x;
}
}; double dist(Point a,Point b)
{
return sqrt((a-b)*(a-b));
}
int pos;
Point p[100];
bool cmp(Point a,Point b)
{
double tmp=sgn((a-p[pos])^(b-p[pos]));
if(tmp==0)return dist(a,p[pos])<dist(b,p[pos]);
if(tmp<0)return false;
return true; } int main ()
{
int T;
cin>>T;
int n;
while(T--)
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>p[i].index>>p[i].x>>p[i].y;
if(p[i].y<p[0].y||(p[i].y==p[0].y&&p[i].x<p[0].x))
swap(p[0],p[i]);
}
pos=0;
for(int i=1;i<n;i++)
{
sort(p+i,p+n,cmp);//这里是i,排序i后的点
pos++;
}
cout<<n;
for(int i=0;i<n;i++)
cout<<' '<<p[i].index;
cout<<endl;
} return 0; }

题意:有一个蚂蚁。在一个平面上吃植物,这个蚂蚁只能往左走,求蚂蚁最多能吃到多少植物,并将路线输出

转化:最多能将所有的植物都吃完。只要绕最外边一圈逆时针往前走,一直走到最里边的 一个植物即可

通过极角排序,先按照左下角植物排序,绕逆时针依次为极点进行排序,排到最后一个点输出即可

最新文章

  1. 数据库sqlserver2008登陆名密码登陆不了怎么办?
  2. JAVA EE(简述)
  3. Linux系统之用户、群组和权限
  4. Memcached在windows下的安装于使用
  5. hdu 4302 优先队列
  6. AndEngine
  7. POJ 3691 AC自动机上的dp
  8. this.IsMounted() is not a function
  9. 【转】【cocos2d-x教程】如何使用WebSocket
  10. jquery mobile event
  11. magent——memcached缓存代理服务器
  12. 正式学习 React(三)番外篇 reactjs性能优化之shouldComponentUpdate
  13. BT5 firefox Flash插件问题
  14. 随机模块_random
  15. 用Python语言开发VTK程序的步骤
  16. IT资产管理—采购与合同管理功能
  17. Android 倒计时按钮,倒计时发送短信验证码…
  18. NGUI的UISprite动态染色的一种方法
  19. Moving Swiftly(从OC切换到Swift)
  20. PHPCMS列表循环序列号自增标签代码

热门文章

  1. Qt开发的应用记录读取用户习惯设置的方法
  2. 【C++】《C++ Primer 》第十二章
  3. 【Java】面向对象
  4. 技术实践丨React Native 项目 Web 端同构
  5. 以事实驳斥:改进你的c#代码的5个技巧(四)
  6. DOCKER 安装步骤-最靠谱的笔记
  7. tf
  8. es_python_操作
  9. python 编译EXE文件
  10. Py-时间,随机,os,sys,jsonpickle序列化,shelve,xml模块