Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

那位牛哥帮忙看看那里错了

Posted by xinghe at 2006-05-10 14:03:54 on Problem 2036
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
#define MAX 194621.00
int co(double a,double b)
{
	if(fabs(a-MAX)<=1e-6&&fabs(b-MAX)<=1e-6) return 0;
	if(fabs(a-MAX)<=1e-6) return 1;
	else if(fabs(b-MAX)<=1e-6) return -1;
	if(fabs(a-b)<=1e-6) return 0;
	if(a-b>1e-6) return 1;
	else if(b-a>1e-6) return -1;
}
void s(double& a,double& b)
{
	double t;
	t=a;
	a=b;
	b=t;
}
struct LI
{
	double x1,y1;
	double x2,y2;
	double k,b;
	bool operator <(const LI &a) const
	{
		if(co(k,MAX)==0&&co(a.k,MAX)==0)
		{
			if(co(b,a.b)==0)
			{
				if(co(y1,a.y1)==0)
				{
					if(co(y2,a.y2)>0) return 0;
					else return 1;
				}
				else if(co(y1,a.y1)>0) return 0;
				else return 1;
			}
			else if(co(b,a.b)>0) return 0;
			else return 1;
		}
		if(co(k,a.k)==0)
		{
			if(co(b,a.b)==0)
			{
				if(co(x1,a.x1)==0)
				{
					if(co(x2,a.x2)>0) return 0;
					else return 1;
				}
				else if(co(x1,a.x1)>0) return 0;
				else return 1;
			}
			else if(co(b,a.b)>0) return 0;
			else return 1;
		}
		else if(co(k,a.k)>0) return 0;
		else return 1;
	}
};
LI line[10001];
int p[100];
int main()
{
	int n,m;
	int i,k=0;
	double z,c;
	while(true)
	{
		scanf("%d",&n);
		if(n==0) break;
		for(i=0;i<n;i++)
		{
			scanf("%lf%lf%lf%lf",&line[i].x1,&line[i].y1,&line[i].x2,&line[i].y2);
			if(co(line[i].x1,line[i].x2)==0)
			{
				if(co(line[i].y1,line[i].y2)>0)
				{
					s(line[i].x1,line[i].x2);
					s(line[i].y1,line[i].y2);
				}
			}
			else if(co(line[i].x1,line[i].x2)>0)
			{
				s(line[i].x1,line[i].x2);
				s(line[i].y1,line[i].y2);
			}
			if(co(line[i].x1,line[i].x2)==0)
			{
				line[i].k=MAX;
				line[i].b=line[i].x1;
			}
			else
			{
				line[i].k=(line[i].y2-line[i].y1)/(line[i].x2-line[i].x1);
				line[i].b=line[i].y1-line[i].x1*line[i].k;
			}
		}
		sort(line,line+n);
		m=1;
		z=line[0].x2;
	//	p[0]=1;
	//	k=1;
		for(i=1;i<n;i++)
		{
			if(co(line[i].k,MAX)==0&&co(line[i-1].k,MAX)!=0) c=line[i].y2;
			if(co(line[i].k,MAX)==0&&co(line[i-1].k,MAX)==0)
			{
				if(co(line[i].b,line[i-1].b)!=0) m++;
				else if(co(line[i].y1,c)>0) m++;
				if(co(line[i].b,line[i-1].b)!=0) c=line[i].y2;
				else if(co(line[i].y2,c)>0) c=line[i].y2;
			}
			else
			{
				if(co(line[i].k,line[i-1].k)!=0) m++;
				else if(co(line[i].b,line[i-1].b)!=0) m++;
				else if(co(line[i].x1,z)>0) m++;
			}
			if(co(line[i].k,line[i-1].k)!=0) z=line[i].x2;
			else if(co(line[i].b,line[i-1].b)!=0) z=line[i].x2;
			else if(co(line[i].x2,z)>0) z=line[i].x2;
			
			
		}
	//	p[k++]=m;
		printf("%d\n",m);
	}
	
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator