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

关于POJ 1328怎么WA?看了网上其他人的源码都差不多的思路。帮着看看吧。谢谢

Posted by suntaoworks at 2012-06-29 21:16:23
#include<stdio.h>
#include<math.h>
#include<stdlib.h>

struct point{
		int x;
		int y;
}array[1000];

struct dis{
		double left;
		double right;
}ran[1000];
//按x坐标排序
void quicksort(int begin, int end){
		if(begin < end){
				int lab = rand()%(end-begin) + begin;
				struct point temp, loc;
				int i = begin - 1;

				temp = array[lab];
				array[lab] = array[end-1];
				array[end-1] = temp;


				for(int j = begin; j < end; ++ j){
						if(array[j].x < temp.x){
								++ i;
								loc = array[i];
								array[i] = array[j];
								array[j] = loc;
						}
				}

				++ i;
				temp = array[end-1];
				array[end-1] = array[i];
				array[i] = temp;

				quicksort(begin, i-1);
				quicksort(i+1, end);
		}
}
//贪心,从左到右画圈
int greedy(int isl, int rad){
		if(rad <= 0)
				return -1;
		for(int i = 0; i < isl; ++ i)
				if(abs(array[i].y) > rad)
						return -1;

		double mid = 0;
		double sqr = pow(rad, 2);
		for(int i = 0; i < isl; ++ i){
				mid = sqrt(sqr - pow(array[i].y, 2));
				ran[i].left = array[i].x - mid;
				ran[i].right = array[i].x + mid;
		}

		int count = 1;
		int j;
//若从左到右,基准点i的右边缘小于左边缘就往右遍历,否则计数变量加1,基准点为变为j
		for(int i = 0; i < isl; ){
				for(j = i+1; j < isl; ++ j)
						if(ran[i].right < ran[j].left){
								++ count;
								i = j;
								break;
						}
				if(j == isl)
						break;
		}
		return count;
}

int main(){
		int isl = 0, rad = 0;
		scanf("%d%d", &isl, &rad);
		
		int temp = 0;
		int count = 0;

		while(isl || rad){
				++ count;
				for(int i = 0; i < isl; ++ i)
						scanf("%d%d", &array[i].x, &array[i].y);
				quicksort(0, isl);
				temp = greedy(isl, rad);
				printf("Case%d:%d\n", count, temp);

				scanf("%d%d", &isl, &rad);
		}

		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