13哥的机器人
Time Limit: 1000 MS Memory Limit: 65536 K
Description
13哥酷爱学习,13哥经过短暂学习后设计出来一机器人。13哥的机器人唯一缺陷是当遇到转弯时,就不知道该怎么走了,但是经过13哥的努力,这个机器人可以根据声音来转动方向,在没有声音的情况下沿直线行走。所以只能麻烦13哥在机器人遇到转弯时候,告诉机器人向左还是向右。
Input
有多组测试数据,第一行输入整数n,表示n个点(n>=3),接下来的n行每行输入一对数字x,y表示平面坐标系线路上的转折点(第一行是起点,最后一行是结束点)。当n为0时结束。
Output
对于每组输入数据单独一行,如果机器人往左转输出L,右则输出R
Sample Input
5
0 0
0 1
-1 1
-1 0
0 0
Sample Output
LLL
Author
鲁学涛
题意
判断下一个点在前两个点的左边还是右边
思路
使用叉积来判断下一个点与前两个点的所构成的三个点的顺时针和逆时针关系即可
坑点
当叉积为0时,不输出任何字符
AC代码
#include<bits/stdc++.h>
using namespace std;
class Point
{
public:
double x,y;
Point(int x = 0,int y = 0):x(x),y(y) {}
Point operator + (Point a)
{
return Point(x + a.x, y + a.y);
}
Point operator - (Point a)
{
return Point(x - a.x, y - a.y);
}
};
typedef Point Vector;
double cross(Vector a,Vector b)
{
return a.x*b.y - a.y*b.x;
}
void isclock(Point a,Point b,Point c)
{
double ans = cross(b-a,c-a);
if(ans>0) cout<<"L";
else if(ans < 0) cout<<"R";
else return ;
}
int main(void)
{
int n;
while(cin>>n,n)
{
Point a[n];
for(int i = 0 ; i < n ; i++) cin>>a[i].x>>a[i].y;
for(int i = 0 ; i < n-2 ; i++)
isclock(a[i],a[i+1],a[i+2]);
cout<<endl;
}
return 0;
}