Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
16ms 416K 附代码好气,一个弱智问题导致wa了好几次。 Source Code Problem: 1034 User: bixiongquan Memory: 416K Time: 16MS Language: GCC Result: Accepted Source Code #include <stdio.h> #include <math.h> #include <string.h> #define DOG_SPEED 2 #define MAX_POINT_NUM 101 #define TRUE (int)1 #define FALSE (int)0 typedef int BOOL; typedef struct { int x; int y; }Point; typedef struct { int num; Point pos[MAX_POINT_NUM]; }Points; Points g_Bob; Points g_interests; BOOL g_isOccupied[MAX_POINT_NUM]; int g_len[MAX_POINT_NUM][MAX_POINT_NUM]; int g_selectNum; int g_selectIdx[MAX_POINT_NUM]; int g_BobToInterest[MAX_POINT_NUM]; void Input() { int i; scanf("%d %d", &g_Bob.num, &g_interests.num); for(i = 0; i < g_Bob.num; i++) { scanf("%d %d", &g_Bob.pos[i].x, &g_Bob.pos[i].y); } for(i = 0; i < g_interests.num; i++) { scanf("%d %d", &g_interests.pos[i].x, &g_interests.pos[i].y); } g_selectNum = 0; memset(g_len, -1, sizeof(g_len)); memset(g_selectIdx, -1, sizeof(g_selectIdx)); memset(g_BobToInterest, -1, sizeof(g_BobToInterest)); } void Output() { int bobIdx, interestIdx; printf("%d\n", g_Bob.num+g_selectNum); for(bobIdx = 0; bobIdx < g_Bob.num; bobIdx++) { printf("%d %d ", g_Bob.pos[bobIdx].x, g_Bob.pos[bobIdx].y); interestIdx = g_BobToInterest[bobIdx]; if(interestIdx != -1) printf("%d %d ", g_interests.pos[interestIdx].x, g_interests.pos[interestIdx].y); } } static double CalcLen(Point* m, Point* n) { double x = m->x - n->x; double y = m->y - n->y; return sqrt(x*x+y*y); } int IsLenSatisfied(int bobIdx, int interestIdx) { double bobLen, dogLen1, dogLen2; if(g_len[bobIdx][interestIdx] == -1) { bobLen = CalcLen(&g_Bob.pos[bobIdx], &g_Bob.pos[bobIdx+1]); dogLen1 = CalcLen(&g_Bob.pos[bobIdx], &g_interests.pos[interestIdx]); dogLen2 = CalcLen(&g_Bob.pos[bobIdx+1], &g_interests.pos[interestIdx]); g_len[bobIdx][interestIdx] = ((bobLen*DOG_SPEED) >= (dogLen1+dogLen2)) ? 1 : 0; } return g_len[bobIdx][interestIdx]; } BOOL DogFinding(int bobIdx) { int interestIdx; for(interestIdx = 0; interestIdx < g_interests.num; interestIdx++) { if(!g_isOccupied[interestIdx] && IsLenSatisfied(bobIdx, interestIdx)) { g_isOccupied[interestIdx] = TRUE; if(g_selectIdx[interestIdx] == -1 || DogFinding(g_selectIdx[interestIdx])) { g_selectIdx[interestIdx] = bobIdx; g_BobToInterest[bobIdx] = interestIdx; return TRUE; } } } return FALSE; } void Proc() { int bobIdx; for(bobIdx = 0; bobIdx < g_Bob.num-1; bobIdx++) { memset(g_isOccupied, 0, sizeof(g_isOccupied)); if(DogFinding(bobIdx)) g_selectNum++; } } int main() { Input(); Proc(); Output(); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator