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 xfxyjwf at 2005-07-24 22:34:30 on Problem 2489
In Reply To:呜呜呜,为什么我总是超15ms,我觉得我的程序不能在减了,或者我的算法不妥??请教啊~~~!!! Posted by:eleana at 2005-07-24 21:21:05
> #include <stdio.h>
> #include <stdlib.h>
> const long maxn=100000;
> const double INFINIT=1000001;
> typedef struct
> {
> 	long x1,y1,x2,y2;
> 	double k;
> }point;
> point p[maxn];
> long n;
> typedef struct
> {
> 	int c;
> 	double k;
> }aaa;
> aaa a[maxn*10];
> __int64 count;
> int compare(const void *a,const void *b)
> {
> 	point *x=(point *)a;
> 	point *y=(point *)b;
> 	double k=x->k-y->k;
> 	if(k==0)
> 	{
> 		if(x->x1==y->x1)
> 			return x->x2-y->x2;
> 		else return x->x1-y->x1;
> 	}
> 	else if(k<0)
> 		return -1;
> 	return 1;
> }
> int main()
> {
> 	int N,m,i;
> 	scanf("%d",&N);
> 	for(m=0;m<N;m++)
> 	{
> 		scanf("%ld",&n);
> 		for(i=0;i<n;i++)
> 		{
> 			scanf("%ld%ld%ld%ld",&p[i].x1,&p[i].y1,&p[i].x2,&p[i].y2);
> 			if(p[i].x2==p[i].x1)
> 				p[i].k=INFINIT;
> 			else p[i].k=(p[i].y2-p[i].y1)/(p[i].x2-p[i].x1);
> 		}
> 
> 		for(i=0;i<maxn*10;i++)
> 		{
> 			a[i].c=0;
> 			a[i].k=-INFINIT;
> 		}
> 		qsort(p,n,sizeof(point),compare);
> 		count=0;
> 		for(i=0;i<n;i++)
> 		{
> 			long j;
> 			if(a[p[i].x1].k==p[i].k)
> 				count+=a[p[i].x1].c;
> 			else
> 				a[p[i].x1].k=p[i].k;
> 			for(j=p[i].x1;j<p[i].x2;j++)
> 				if(a[j].k==p[i].k)
> 					a[j].c++;
> 				else
> 				{
> 					a[j].c=1;
> 					a[j].k=p[i].k;
> 				}
> 		}
> 		printf("Scenario #%d:\n",m+1);
> 		printf("%I64d\n\n",count);
> 	}
> 	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