#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; }

评论