Gopher II
| Time Limit: 2000MS | Memory Limit: 65536K | |
| Total Submissions: 3680 | Accepted: 1539 |
Description
The gopher family, having averted the canine threat, must face a new predator.
The are n gophers and m gopher holes, each at distinct (x, y) coordinates. A hawk arrives and if a gopher does not reach a hole in s seconds it is vulnerable to being eaten. A hole can save at most one gopher. All the gophers run at the same velocity v. The gopher family needs an escape strategy that minimizes the number of vulnerable gophers.
The are n gophers and m gopher holes, each at distinct (x, y) coordinates. A hawk arrives and if a gopher does not reach a hole in s seconds it is vulnerable to being eaten. A hole can save at most one gopher. All the gophers run at the same velocity v. The gopher family needs an escape strategy that minimizes the number of vulnerable gophers.
Input
The input contains several cases. The first line of each case contains four positive integers less than 100: n, m, s, and v. The next n lines give the coordinates of the gophers; the following m lines give the coordinates of the gopher holes. All distances are in metres; all times are in seconds; all velocities are in metres per second.
Output
Output consists of a single line for each case, giving the number of vulnerable gophers.
Sample Input
2 2 5 10 1.0 1.0 2.0 2.0 100.0 100.0 20.0 20.0
Sample Output
1
Source
敲错了一个变量,让我WA了很久都没看出来。。
Source Code
| Problem: 2536 | User: bingshen | |
| Memory: 748K | Time: 32MS | |
| Language: G++ | Result: Accepted |
- Source Code
#include<stdio.h> #include<algorithm> #include<string.h> #include<math.h> #include<vector> using namespace std; struct Point { double x; double y; }; Point p1[105]; Point p2[105]; vector<int>map[105]; int link[105]; bool cover[105]; int n,m; void init() { memset(link,-1,sizeof(link)); memset(map,0,sizeof(map)); } double dis(Point a,Point b) { return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); } void makemap(int s,int v) { int i,j; double r; r=s*v; for(i=0;i<n;i++) for(j=0;j<m;j++) { if(dis(p1[i],p2[j])<=r) map[i].push_back(j); } } bool find(int v) { int i; for(i=0;i<map[v].size();i++) { if(!cover[map[v][i]]) { cover[map[v][i]]=true; if(link[map[v][i]]==-1||find(link[map[v][i]])) { link[map[v][i]]=v; return true; } } } return false; } int main() { int i,life; double s,v; while(scanf("%d%d%lf%lf",&n,&m,&s,&v)!=EOF) { init(); life=0; for(i=0;i<n;i++) scanf("%lf%lf",&p1[i].x,&p1[i].y); for(i=0;i<m;i++) scanf("%lf%lf",&p2[i].x,&p2[i].y); makemap(s,v); for(i=0;i<n;i++) { memset(cover,0,sizeof(cover)); if(find(i)) life++; } printf("%d/n",n-life); } return 0; }
本文介绍了一种算法,旨在解决gopher家族面对猎鹰威胁时如何通过最优策略最小化被捕食的风险。该算法考虑了gopher与洞穴的位置、速度等参数,利用匹配算法来确定哪些gopher能成功进入洞穴避难。
3001

被折叠的 条评论
为什么被折叠?



