简单多边形
链接:https://www.nowcoder.com/acm/contest/110/B
来源:牛客网
来源:牛客网
为了让所有选手都感到开心,Nowcoder练习赛总会包含一些非常基本的问题。 比如说:
按顺时针或逆时针方向给你一个简单的多边形的顶点坐标,请回答此多边形是顺时针还是逆时针。
输入描述:
输入包含N + 1行。 第一行包含一个整数N,表示简单多边形的顶点数。 在下面的N行中,第i行包含两个整数xi,yi,表示简单多边形中的第i个顶点的坐标。
输出描述:
如果简单多边形按顺时针顺序给出,则在一行中输出“clockwise”(不带引号)。 否则,打印"counterclockwise''(不带引号)。
示例1
输入
3 0 0 1 0 0 1
输出
counterclockwise
示例2
输入
3 0 0 0 1 1 0
输出
clockwise
备注:
3≤N≤30 -1000≤xi,yi≤1000 数据保证,这个简单多边形的面积不为零。简单多边形的判断,对于凸多边形而言,只需对某一个点计算
(x[i] - x[a]) * (y[b] - y[i]) - (y[i] - y[a]) * (x[b] - x[i])
如果上式的值为正,逆时针;为负则是顺时针
而对于凹多边形,则需对于多边形的每一个点计算上述值,如果正值比较多,是逆时针;负值较多则为顺时针。
#include<stdio.h>
#define N 120
int main()
{
int ans,n,x[N],y[N],i,h,d,a,b;
while(scanf("%d",&n)!=EOF)
{
h=0;d=0;
for(i=0;i<n;i++)
scanf("%d%d",&x[i],&y[i]);
for(i=0;i<n;i++)
{
if(i==0)
{
a=n-1;
b=i+1;
}
else if(i==n-1)
{
a=i-1;
b=0;
}
else {
a=i-1;
b=i+1;
}
ans = (x[i] - x[a]) * (y[b] - y[i]) - (y[i] - y[a]) * (x[b] - x[i]);
if(ans>0)
h++;
else
d++;
}
if(h<d)
printf("clockwise\n");
else
printf("counterclockwise\n");
}
return 0;
}