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

来源:互联网 发布:windows caffe2 编译 编辑:程序博客网 时间:2024/06/08 16:48

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


我的代码:

#include<iostream>#include<cmath>#define N 35#define K 105using 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;elsecout <<"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;}


原创粉丝点击