hdu 2150 水题,我真系好无语咯

我WA,他AC,无语…………………………………………………………………………………………


我的代码:

#include<iostream>
#include<cmath>

#define N 35
#define K 105

using namespace std;

class cor{
public:
	int x,y;
};

int drection(cor& a,cor& b,cor& c){
	return (c.x-a.x)*(b.y-a.y)-(b.x-a.x)*(c.y-a.y);
}

bool on_segment(cor& a,cor& b,cor& c){
	return (min(a.x,b.x) <= c.x && c.x <= max(a.x,b.x))&&((min(a.y,b.y) <= c.y)&&(c.y <= max(a.y,b.y)));
}

bool judge(cor& p1,cor& p2,cor& p3,cor& p4){
	int d1 = drection(p1,p2,p3);
	int d2 = drection(p1,p2,p4);
	int d3 = drection(p3,p4,p1);
	int d4 = drection(p3,p4,p2);
	if((d1*d2 < 0) && (d3*d4 < 0))
		return true;
	else if(!d1 && on_segment(p1,p2,p3))
		return true;
	else if(!d2 && on_segment(p1,p2,p4))
		return true;
	else if(!d3 && on_segment(p3,p4,p1))
		return true;
	else if(!d4 && on_segment(p3,p4,p2))
		return true;
	else
	    return false;
}


int main()
{
	cor pipe[N][K];
	int k[K];
	int n;
	while(cin >>n){
		bool flag = true;
		for(int i = 0;i < n;i++){
			cin >>k[i];
			for(int j = 0;j < k[i];j++){
				cin >>pipe[i][j].x >>pipe[i][j].y;
			}
		}
		for(int i = 0;i < n;i++){
			for(int j = i+1;j < n;j++){
				for(int s = 0;s < k[i]-1;s++){
					for(int t = 0;t < k[j]-1;t++){
						if(judge(pipe[i][s],pipe[i][s+1],pipe[j][t],pipe[j][t+1])){
							flag = false;
							break;
						}
					}
				}
			}
		}
		if(flag)
			cout <<"No" <<endl;
		else
			cout <<"Yes" <<endl;
	}
	return 0;
}


他的代码:

#include<stdio.h>
struct pipe{
int point;
int x[101];
int y[101];
}a[30];
int max(int a,int b)
{
if(a>b) 
{return a;}
else
{return b;}
}
int min(int a,int b)
{
if(a>b) 
{return a;}
else
{return b;}
}
int dic(int x1,int y1,int x2,int y2,int x3,int y3)
{
int n;
n=(x3-x1)*(y2-y1)-(x2-x1)*(y3-y1);
return n;
}
int onse(int xi,int yi,int xj,int yj,int xk,int yk)
{
if((min(xi,xj)<=xk&&xk<=max(xi,xj))&&(min(yi,yj)<=yk&&yk<=max(yi,yj)))
{return 1;}
else
{return 0;}
}
int cross(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4)
{
int d1,d2,d3,d4;
d1=dic(x3,y3,x4,y4,x1,y1);
d2=dic(x3,y3,x4,y4,x2,y2);
d3=dic(x1,y1,x2,y2,x3,y3);
d4=dic(x1,y1,x2,y2,x4,y4);
if(((d1>0&&d2<0)||(d1<0&&d2>0))&&((d3>0&&d4<0)||(d3<0&&d4>0)))
{return 1;}
else if(d1==0&&onse(x3,y3,x4,y4,x1,y1))
{return 1;}
else if(d2==0&&onse(x3,y3,x4,y4,x2,y2))
{return 1;}
else if(d3==0&&onse(x1,y1,x2,y2,x3,y3))
{return 1;}
else if(d4==0&&onse(x1,y1,x2,y2,x4,y4))
{return 1;}
else
{return 0;}
}
int main(void)
{
int n,cros;
int i,j,k,b;
while(scanf("%d",&n)==1)
{
   cros=0;
   for(i=0;i<n;i++)
   {
    scanf("%d",&a[i].point);
    for(j=0;j<a[i].point;j++)
    {
     scanf("%d%d",&a[i].x[j],&a[i].y[j]);
    }
   }
   for(i=0;i<n;i++)
   {
    for(j=i+1;j<n;j++)
    {
     for(k=0;k<a[i].point-1;k++)
     {
      for(b=0;b<a[j].point-1;b++)
      {
       if(cross(a[i].x[k],a[i].y[k],a[i].x[k+1],a[i].y[k+1],a[j].x[b],a[j].y[b],a[j].x[b+1],a[j].y[b+1]))
       {cros=1;}
      }
     }
    }
   }
   if(cros)
   {
    printf("Yes\n");}
   else
   {
    printf("No\n");}
}
return 0;
}


你可能感兴趣的:(hdu 2150 水题,我真系好无语咯)