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 tiaoer at 2012-03-08 14:38:04 on Problem 1328
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
struct position
{
	double raw;
	double line;
};
int main()
{
	struct position *p,t;
	int n,i,number,range,j,extend,zong,flag2;
	double h,a[1001],b[1001],d;
	for(zong=1;;zong++)
	{
		scanf("%d%lf",&n,&d);
		
		if(n!=0||d!=0)
		{
			//printf("%d\n",n);
			p=(struct position*)malloc(n*sizeof(struct position));
			for(i=0;i<n;i++)
			{
				scanf("%lf%lf",&p[i].raw,&p[i].line);
			}
			for(i=0;i<n-1;i++)
			{
				for(j=0;j<n-i-1;j++)
				{
					if(p[j].raw>p[j+1].raw)
					{
						t=p[j];
						p[j]=p[j+1];
						p[j+1]=t;
					}
				}
			}//排序完成
			
			flag2=0;
			
			for(i=0,number=1;i<n;i++,number++)//number指区间的个数,i是指岛的序号
			{
				h=(d*d-(p[i].line)*(p[i].line));
				
				if(h<0)
				{
					flag2=1;
					break;
				}
				//printf("lijuan\n");
				
				if(h==0)
				{
					a[number]=b[number]=p[i].raw;
				}
				if(h>0)
				{
					a[number]=p[i].raw-sqrt(h);
					b[number]=p[i].raw+sqrt(h);
				}//确定区间a、b
				//printf("lijuan\n");
				if(number>=2)
				{
					int flag=0;
					for(range=1;range<number;range++)
					{
						if(a[number]>=a[range]&&a[number]<=b[range])//a在雷达区间内
						{
							int l=0;
							for(extend=1;extend<number;extend++)
							{
								if(b[number]>=a[extend]&&b[number]<=b[extend])//b在雷达区间内
								{
									l=1;
									a[range]=a[number];
									b[extend]=b[number];
									number--;
									flag=1;
									break;
								}
								
							}
							if(l!=1)//b在雷达区间外
							{
								a[range]=a[number];
								number--;
								flag=1;
								break;
							}
						}
						
						
					}
					if(flag==0)//a在雷达区间外
					{
						if(a[number]>=b[number-1])
						{
							continue;
						}
						else
						{
							int l=0;
							
							for(extend=1;extend<number;extend++)
							{
								if(b[number]>=a[extend]&&b[number]<=b[extend])//b在雷达区间内
								{
									l=1;
									
									b[extend]=b[number];
									number--;
									
									break;
								}
								
							}
							if(l==0)//b在雷达区间外
							{
								
								number--;
								
								
							}
						}
					}
				}
				
			}
			if(flag2==0)
			{
				number--;
				printf("Case %d: %d\n",zong,number);
			}
			else
			{
				printf("Case %d: -1\n",zong);
			}
	}
	else
	{
		break;
	}
	}
	
	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