真人CS (zju2355,二分图)

/*http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=2355

2355:真人CS 

时间限制:秒内存限制:32 兆特殊判题: 否 提交:106解决: 40

题目描述

小明和他的小伙伴们很喜欢玩真人CS,正好现在放暑假了,小明一行人便来到真人CS的场地开战了,交战双方是以小明为首的A队,和以小亮为首的B队。

正在A队侦查敌情的时候,他们被埋伏好的B队发现了!A队所在的区域有一些掩护物,如果某个队员在s秒内没能到达某个掩护物处,则这个队员有被击中的可能。

现在告诉你A队队员的个数、掩护物的个数以及每个队员和每个掩护物的位置坐标,并且每个队员的移动速度都相同且匀速。问你在采取最佳躲避策略的情况下,会有多少队员仍然可能会被击中。

注意:一个掩护物只能躲一个人。

输入格式

输入包含多组测试数据。

每组第一行输入4个正整数nmsv(均小于100),n表示A队队员个数,m表示掩护物个数,sv的含义如题目描述中所述。

接下来n行每行输入两个浮点数x1y1,表示每个队员的位置坐标。

再接下来m行每行输入两个浮点数x2y2,表示每个掩护物的位置坐标。

题目中距离单位为米,时间单位为秒,速度单位为米/秒。

输出

对于每组输入,输出在采取最佳躲避策略的情况下,会有多少队员仍然可能会被击中。

样例输入

2 2 5 10

1.0 1.0

2.0 2.0

100.0 100.0

20.0 20.0

样例输出

1

思路:二分匹配,刚开始没有看出来

开始的时候用的是贪心法,借助排序来计算,这个思路一开始就是错误的,因为考虑的时候一点也不周全

换成了用二分匹配法,但是但是一直wrong answer.结果是因为很低级的错误造成的,字的类型没有弄好的原因造成的

2013.7.15

内存 耗时 语言 代码长度 提交时间

1420 kb  32 ms          1404 B 2013-07-15 16:55:56

*/


#include<string.h>
#include<stdio.h>
#include<istream>
#include<stdlib.h>
#include<algorithm>
#include<math.h>
#include <iostream>
using namespace std;
const int maxn=105;
int vis[maxn];
int map[maxn][maxn];
int result[maxn];
double X1[maxn],Y1[maxn];
double y2[maxn],x2[maxn];
int n,m;
double length(double a1,double b1,double a2,double b2)
{
 return sqrt((a1-a2)*(a1-a2)+(b1-b2)*(b1-b2));
}
int find( int a)//利用KM求最大匹配数
{
for(int i=1;i<=m;i++)
 {
  if(map[a][i]==1&&!vis[i])
   {
  vis[i]=1;
  if(result[i]==0||find(result[i]))
    {result[i]=a;
     return 1;
    }
   }
 }
 return 0;
}
int main()
{
  int i,j;
  int cnt;
double s,v;
  while(scanf("%d%d",&n,&m)!=EOF)
  {
  scanf("%lf%lf",&s,&v);
  cnt=0;
  for(i=1;i<=n;i++)
  scanf("%lf%lf",&X1[i],&Y1[i]);
  for(j=1;j<=m;j++)
   scanf("%lf%lf",&x2[j],&y2[j]);
  //memset(vis,0,sizeof(vis));
  memset(map,0,sizeof(map));
  memset(result,0,sizeof(result));
  for(i=1;i<=n;i++)
   for(j=1;j<=m;j++)
  {
   if(length(X1[i],Y1[i],x2[j],y2[j])<=s*v)
    map[i][j]=1;
  }
  for(i=1;i<=n;i++)
  {memset(vis,0,sizeof(vis));
   if(find(i))
   cnt++;
  }
   printf("%d\n",n-cnt);
 }
    return 0;
}


你可能感兴趣的:(真人CS (zju2355,二分图))