打篮球 ( pass ) 图论

【题目描述】

信息组的同学是比较喜欢打篮球的。

喜欢打篮球的同学很容易发现传球在篮球运动中是非常重要的,球传的好也就意味着球

打的顺。经常传球虽然不一定保证

100%

概率进球,但是总归是使球场气氛更加活跃了。

现在我们来看一场篮球比赛,肉蟹队vs宇宙大总统队。每支队伍都有N个(肉蟹)或(宇宙大总统),现在轮到肉蟹队进攻。比赛可以看成在一个无限大的二维平面上进行,每个球员都有一个坐标篮筐也有一个坐标(50,0)。肉蟹们进攻的方式就是先传球若干次,再投篮。

一旦投篮,这一轮进攻就立即结束。

由于有宇宙大总统们的防御,所以肉蟹们传球和投篮都是有成功率的。

传球和投篮的轨迹可以看成一条线段。

关于传球和投篮的成功率如下:

传球:

Cp*(1-(ls/150)^2)*dr/(dr+1)

投篮:

(Cs*dr/(dr+1))^ln(ls)

其中

Cp和Cs

是给定的常数,ls是球的运动轨迹的长度,dr是防御队员的干扰系数,

由于宇宙大总统非常有智慧,所以大总统们知道他们既可以干扰传球的,也可以干扰接球的,既可以盖帽,也可以干扰球(这里干扰球不算犯规),因此dr就等于所有宇宙大总统到球运动轨迹两端点距离的最小值。

肉蟹们知道直接与宇宙大总统对抗是没有胜算的,所以她们对球场施了一个神秘的魔法,使得场上的所有人都瞬间变肉,以至于无法移动。

现在球在第一个肉蟹手上,请你设计一个传球和投篮的方案。求肉蟹们在这一轮就进球的概率最大是多少。

【输入数据】

第一行三个数,分别表示

N,Cp,Cs

接下来N行,每行两个数,表示肉蟹们的坐标

接下来N行,每行两个数,表示宇宙大总统们的坐标

【输出数据】

一行,一个数,即最大的概率。

精确到小数点后6位。

【输入样例1】

3 1 1

50 50

35 60

70 15

75 5

72 25

45 17

【输出样例1】

0.806732

【输入样例2】

1 0.5 0.5

50 4

50 3

【输出样例2】

0.146342

【输入样例3】

5 0.999999 0.8

50 50

40 50

40 40

40 30

50 20

50 41

44 29

48

27

45 41

48 64

【输出样例3】0.294171

【数据约定】

30%:1≤N≤ 5100%:1≤N≤ 500≤坐标≤ 1000≤Cp,Cs≤ 1


这题其实可以用DP和最短路做,我选择的是最短路。

我们只需预处理一些数据,然后就可以跑一遍spfa,然后在一一和篮筐判定选出答案就可以了。

代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define ll long long
#define il inline
#define db double
using namespace std;
int n;
db cp,cs;
struct rou
{
    db x,y;
}r[145];
struct tong
{
    db x,y;
}t[145];
il db distance(db x1,db y1,db x2,db y2)
{
    db r1=x2-x1,r2=y2-y1;
    return (db)sqrt(r1*r1+r2*r2);
}
db dist1[145][145];
db dist2[145][145];
db dist[145];
db lan[145];
db gan[145];
db minx=9999;
bool vis[145];
il void spfa()
{
    int t[145];
    int head=0,tail=1;
    t[0]=1;
    dist[1]=1;
    while(head!=tail)
    {
        int h=t[head++];
        vis[h]=0;
        for(int i=1;i<=n;i++)
        {
            db ls=dist1[h][i],dr=min(gan[h],gan[i]);
            if(dist[i]<dist[h]*(cp*(1-(ls/150)*(ls/150))*(dr/(dr+1))))
            {
                dist[i]=dist[h]*(cp*(1-(ls/150)*(ls/150))*(dr/(dr+1)));
                if(!vis[i])
                {
                    vis[i]=1;
                    t[tail++]=i;
                }
            }
        }
    }
}
int main()
{
    freopen("pass.in","r",stdin);
    freopen("pass.out","w",stdout);
    cin>>n>>cp>>cs;
    for(int i=1;i<=n;i++)
    cin>>r[i].x>>r[i].y;
    for(int i=1;i<=n;i++)
    cin>>t[i].x>>t[i].y;
    for(int i=1;i<=n;i++)
    lan[i]=distance(r[i].x,r[i].y,50.0,0);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
            dist1[i][j]=dist1[j][i]=distance(r[i].x,r[i].y,r[j].x,r[j].y);
            dist2[i][j]=distance(r[i].x,r[i].y,t[j].x,t[j].y);
        }
    for(int i=1;i<=n;i++)
    gan[i]=9999;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            gan[i]=min(gan[i],dist2[i][j]);
    for(int i=1;i<=n;i++)
        minx=min(minx,distance(t[i].x,t[i].y,50.0,0));
    spfa();
    db ans=0;
    for(int i=1;i<=n;i++)
    {
        db dr=min(minx,gan[i]);
        ans=max(ans,dist[i]*(pow((cs*dr/(dr+1)),(log(lan[i])))));
    }
    printf("%f\n",ans);
    return 0;
}
时间: 2024-10-29 19:08:23

打篮球 ( pass ) 图论的相关文章

POJ 3352 Road Construction(图论-tarjan)

Road Construction Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8647   Accepted: 4318 Description It's almost summer time, and that means that it's almost summer construction time! This year, the good people who are in charge of the ro

POJ 2723 Get Luffy Out(图论-2SAT,搜索-二分)

Get Luffy Out Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7488   Accepted: 2845 Description Ratish is a young man who always dreams of being a hero. One day his friend Luffy was caught by Pirate Arlong. Ratish set off at once to Arlo

图论trainning-part-1 E. Invitation Cards

E. Invitation Cards Time Limit: 8000ms Memory Limit: 262144KB 64-bit integer IO format: %lld      Java class name: Main In the age of television, not many people attend theater performances. Antique Comedians of Malidinesia are aware of this fact. Th

图论trainning-part-1 G. Stockbroker Grapevine

G. Stockbroker Grapevine Time Limit: 1000ms Memory Limit: 10000KB 64-bit integer IO format: %lld      Java class name: Main Stockbrokers are known to overreact to rumours. You have been contracted to develop a method of spreading disinformation among

记一场精彩的篮球比赛——浅谈策略模式

策略模式 声明:本文为原创,如有转载请注明转载与原作者并提供原文链接,仅为学习交流,本人才识短浅,如有错误,敬请指正 虽然我本人比较讨厌一些很官方的术语定义,因为我经常弄不明白有些定义讲了个啥,但是为了让这篇博文显得不那么轻浮,所以我也就不能免俗的先将设计模式之策略模式的定义首先丢到各位看官面前. 策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 第一眼这个定义看上去,难免会让人心生胆怯,又是算法族,又是封装,又是替换,似乎很复杂的样子,但是实

图论基础知识总结

图论基础知识总结 前言 因为博主太菜,好多之前学过的图论算法都要不记得了,于是开了这篇博文提醒自己要记得复习图论. 代码 #include<bits/stdc++.h> using namespace std; #define gc() getchar() inline int In(){ char c=gc(); int x=0,ft=1; for(;c<'0'||c>'9';c=gc()) if(c=='-') ft=-1; for(;c>='0'&&c&

算法提高课——图论

图论难点:问题的转化和抽象(可看成特殊的某一类DP) 图论与DP的联系: DP问题(从集合角度分析最优化问题)可以看成从F(0,0).F(0,1).F(1,2)......F(0,m)到F(n,m)的最长路.因此DP问题可以转化为拓扑图(一般DP问题的状态间无环)上的最短(长)路. 当DP依赖关系不具有拓扑序时(即存在环时),可以将其转化为最短路,也可以用高斯消元. //TLE的原因常常是没有memsert //st数组在不同算法中的用法: 单源最短路的建图方式 AcWing 1129. 热浪

第九节 图论和搜索

1. 图论算法(用BFS,DFS) 拓扑排序 克隆图 找连通块 六度问题 2.BFS 队列实现:    树中的BFS与图中的BFS有什么不同?树中没有环,图中有环需要一个set来记录搜索过的节点: 应用:图的遍历,最短路径 3 搜索   搜索题的套路比较固定.

图论(A*算法,K短路) :POJ 2449 Remmarguts&#39; Date

Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 25216   Accepted: 6882 Description "Good man never makes girls wait or breaks an appointment!" said the mandarin duck father. Softly touching his little ducks' head, h