【u252】泽泽在巴西
Time Limit: 1 second 
Memory Limit: 128 MB
【问题描述】
泽泽帮助了英国某街道尽量减少酸雨的伤害,街道办主任非常感激他,就把他领到一扇门前,告诉他这扇门能通往好地方,具体 
好到什么程度要看泽泽人品。泽泽毫不犹豫地走了进去…… 
泽泽来到了足球王国——巴西。这可是个好地方,泽泽看来人品攒了不少了。这里大街小巷都在踢足球,其乐无穷。 
突然,泽泽被一个人拎了起来,一看,是个足球流氓。他后面跟了一大群足球流氓,正虎视眈眈地看他。他们要求和泽泽比赛 
,输了就要揍他。 
没办法,泽泽硬着头皮和足球流氓另外掳来的几个人一起组建了一只队伍,和足球流氓队比赛。 
比赛开始,泽泽队率先发球。泽泽观察了四周,想怎么才能用最短的时间射门呢? 
射门的时间为距离*2,而传球的时间是距离*1。所以泽泽想找一条用时最少的射门路径,来打败足球流氓。 
足球流氓当然不会袖手旁观,他们会拦截。当泽泽队伍中的传球人、被传球人之间有某足球流氓并且他们在同一直线上时,传 
球不会成功,即不能这样传球。比如A(1,2)想传球给B(7,8),中间有个足球流氓C(3,4),则他们在同一直线,传球不 
成功。射门不受足球流氓影响。
【输入格式】
第1行4个整数x0,y0,n,m。x0,y0表示球门的坐标,n表示泽泽队伍有几个人,m表示足球流氓有几个人。 接下来的n行,分别有2个整数,表示泽泽球队的球员坐标。其中最前面的2个整数是泽泽的坐标。球一开始在泽泽脚下。 接下来的m行,分别有2个整数,表示足球流氓的球员坐标。 保证不会有2个人坐标相同。
【输出格式】
输出一个整数,是最短时间四舍五入取整后的结果。
【数据规模】
对于80%的数据,n<=10,m<=5 对于100%的数据,n<=300,m<=100
Sample Input1
0 0 5 2 
    20 20 
    27 -14 
    0 16 
    -7 -9 
    23 38 
    22 24 
    3 0
Sample Output1
52
【样例说明】
泽泽(20,20)传给3号队员(0,16),3号队员再射门(0,0),总共用了52。
【题目链接】:http://noi.qz5z.com/viewtask.asp?id=u252
【题解】 
 
直接三层fou循环枚举两个人之间能不能传球; 
i,j枚举要传球的两个人,k枚举“挡在中间的人”,如果i,k的距离s1加上j,k的距离s2等于i,j的距离s3;则k的确挡在了i,j之间,则不建边;否则建一条边;(边权就是i,j的距离); 
然后n个人再分别建一条指向球门的边即可; 
最后从泽泽的1号节点开始做最短路;(球门就当做0号节点) 
最后输出f[0]; 
 
【完整代码】
#include <cstdio>
#include <cmath>
#include <vector>
#include <queue>
using namespace std;
const int MAXN = 400;
struct point
{
    double x,y;
};
vector <int> a[MAXN];
vector <double> w[MAXN];
queue <int> dl;
bool inque[MAXN];
double a0,b0;
int n,m;
point b[400],c[MAXN],goal;
double f[MAXN];
double sqr(double x)
{
    return x*x;
}
double dis(point a,point b)
{
    return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
}
double jue(double x)
{
    if (x>0)
        return x;
    else
        return -x;
}
bool can(point a,point b,point c)
{
    double dis1 = dis(a,b);
    double dis2 = dis(b,c);
    double dis3 = dis(a,c);
    dis1 = dis1+dis2;
    double judge =jue(dis1-dis3);
    if (judge<1e-4)
        return false;
    else
        return true;
}
int main()
{
    //freopen("F:\\rush.txt","r",stdin);
    scanf("%lf%lf%d%d",&goal.x,&goal.y,&n,&m);
    for (int i = 1;i <= n;i++)
        scanf("%lf%lf",&b[i].x,&b[i].y);
    for (int i = 1;i <= m;i++)
        scanf("%lf%lf",&c[i].x,&c[i].y);
    for (int i = 1;i <= n;i++)
        for (int j = 1;j <= n;j++)
            if (i!=j)
            {
                bool ok = true;
                for (int k =1;k <= m;k++)
                    if (!can(b[i],c[k],b[j]))
                    {
                        ok = false;
                        break;
                    }
                if (ok)
                {
                    a[i].push_back(j);
                    w[i].push_back(dis(b[i],b[j]));
                }
            }
    for (int i = 1;i <= n;i++)
    {
        a[i].push_back(0);
        w[i].push_back(2*dis(b[i],goal));
    }
    for (int i = 0;i <= n;i++)
        f[i] = 2100000000.0;
    f[1] = 0;
    dl.push(1);
    inque[1] = true;
    while (!dl.empty())
    {
        int x = dl.front();
        inque[x] = false;
        dl.pop();
        int len = a[x].size();
        for (int i = 0;i <= len-1;i++)
        {
            int y = a[x][i];
            double c = w[x][i];
            if (f[y]>f[x]+c)
            {
                f[y] = f[x] + c;
                if (!inque[y])
                {
                    inque[y] = true;
                    dl.push(y);
                }
            }
        }
    }
    printf("%.0lf\n",f[0]);
    return 0;
}
【u252】泽泽在巴西的更多相关文章
- 使用NW.js封装微信公众号菜单编辑器为桌面应用
		开发微信公众号的朋友都会遇到一个常见的需求就是修改自定义菜单,如果每个人都去开发这个不经常使用的功能确实有点浪费时间.前段时间在github上找到一个仿企业号的菜单编辑界面,结合微信的C# SDK开发 ... 
- HTML页面关键词随机分布布局
		结合underscore-min.js,和D3.js 绘制HTML关键词随机分布 <!DOCTYPE html> <html> <head> <meta ch ... 
- HDOJ 2546饭卡(01背包问题)
		http://acm.hdu.edu.cn/showproblem.php?pid=2546 Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如 ... 
- HDOJ 1864 最大报销额(01背包)
		http://acm.hdu.edu.cn/showproblem.php?pid=1864 最大报销额 Time Limit: 1000/1000 MS (Java/Others) Memor ... 
- HDOJ 2955 Robberies (01背包)
		10397780 2014-03-26 00:13:51 Accepted 2955 46MS 480K 676 B C++ 泽泽 http://acm.hdu.edu.cn/showproblem. ... 
- HDOJ 1203 I NEED A OFFER!(01背包)
		10397507 2014-03-25 23:30:21 Accepted 1203 0MS 480K 428 B C++ 泽泽 题目链接:http://acm.hdu.edu.cn/showprob ... 
- HDOJ 1596
		9899828 2013-12-27 16:42:37 Accepted 1596 3312MS 6668K 711 B C++ 泽泽 floyed暴力 #include<cstdio> ... 
- HDOJ 1863 prim算法 HDOJ 1879
		#include<cstdio> #include<cstring> #define inf 0xffffff ][]; int ans; void prim(int n) { ... 
- HDOJ 2066 floyed优化算法
		一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ... 
随机推荐
- LinkCutTree详解
			LCT详解 没有比这再详细的了, 相信我 
- C/C++(函数)
			函数 函数三要素:函数名,参数,返回值 重点研究函数的输入输出 随机数函数 //产生一组随机数 #include<stdio.h> #include<stdlib.h> #in ... 
- css3+jq--小箭头旋转180度案例
			html: <aside class="tea_getBtn"> <div class="w"> <span class=&quo ... 
- 【Codeforces Round #457 (Div. 2) B】Jamie and Binary Sequence
			[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 把n分解成二进制的形式. n=2^a0+2^a1+...+2^a[q-1] 则固定就是长度为q的序列. 要想扩展为长为k的序列. 可 ... 
- hdoj-1870-愚人节的礼物(栈)
			愚人节的礼物 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ... 
- POJ 题目1145/UVA题目112 Tree Summing(二叉树遍历)
			Tree Summing Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8132 Accepted: 1949 Desc ... 
- npm install (让别人下载自己的包)
			好几天没更新了,再这里跟大家说声抱歉,今天来点干货. 发布一个包在npm上,可以供世界所有人使用,想一下,以前我们做项目,都是在npm install 别人的包,什么时候才能install我们自己的包 ... 
- 企业网管软件之SOLARWINDS实战-制作拓扑图
			企业网管软件之SOLARWINDS实战-制作拓扑图-开始 企业网管软件之SOLARWINDS实战-制作拓扑图 本文出自 "李晨光原创技术博客" 博客,谢绝转载! 
- Vue的学习--遇到的一些问题和解决方法
			包括: 1.Missing space before function parentheses 2.如何给.vue文件的页面添加css 3.如何给.vue文件页面里的元素添加监听器 4.如何为每一个页 ... 
- asp.net Code学习二(使用vs 2015 update 3)
			1.在vs 2015上搭建asp.net core: 安装 .Net core sdk.vs2015 tool 即可使用vs 2015开发asp.net core. 2.Net core中国学习小组 ... 
