#include"iostream.h"
void print(int *data,int n)
{
int i;
int a,b;
//-----判断前面有没有相同的点,如果有,则从第二个起将所有的点前移,并将点的总数n减1-----
while(data[2]==data[0]&&data[3]==data[1])
{
for(i=0;i<2*n-2;i++) data[i]=data[i+2]; //前移
n--; //总数减1
}
//-----如果不相同的点只有小于或等于2个,则输出“YES”-----
if(n<=2) {cout<<"YES"<<endl; return;}
//-----如果第一个点的横坐标跟第二个点的横坐标相等,则直接判断其它(n-2)个点的横坐标是否也跟它们相等-----
if(data[2]==data[0])
{
//-----将其它(n-2)个点的横坐标与其进行比较-----
for(i=0;i<n-2;i++)
if(data[2*i+4]!=data[2])
{cout<<"NO"<<endl;return;}
//-----如果都相等,则输出“YES”-----
cout<<"YES"<<endl;
return;
}
//-----如果第一个点的纵坐标跟第二个点的纵坐标相等,则直接判断其它(n-2)个点的纵坐标是否也跟它们相等-----
if(data[3]==data[1])
{
//-----将其它(n-2)个点的纵坐标与其进行比较-----
for(i=0;i<n-2;i++)
if(data[2*i+5]!=data[1])
{cout<<"NO"<<endl;return;}
//-----如果都相等,则输出“YES”-----
cout<<"YES"<<endl;
return;
}
//-----一般情况下作如下处理-----
a=data[3]-data[1];b=data[2]-data[0];
//-----利用斜率进行比较-----
for(i=0;i<n-2;i++)
if(a*(data[2*i+4]-data[0])!=b*(data[2*i+5]-data[1]))
{cout<<"NO"<<endl;return;}
cout<<"YES"<<endl;
}
int main()
{
int i,n;
int data[300];
while(cin>>n)
{
for(i=0;i<2*n;i++)
cin>>data[i];
print(data,n);
}
return 1;
}
正文
stu(1059)2005-08-30 20:16:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/elva6401/4271.html
阅读(2551) | 评论(0)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论