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】泽泽在巴西的更多相关文章

  1. 使用NW.js封装微信公众号菜单编辑器为桌面应用

    开发微信公众号的朋友都会遇到一个常见的需求就是修改自定义菜单,如果每个人都去开发这个不经常使用的功能确实有点浪费时间.前段时间在github上找到一个仿企业号的菜单编辑界面,结合微信的C# SDK开发 ...

  2. HTML页面关键词随机分布布局

    结合underscore-min.js,和D3.js 绘制HTML关键词随机分布 <!DOCTYPE html> <html> <head> <meta ch ...

  3. HDOJ 2546饭卡(01背包问题)

    http://acm.hdu.edu.cn/showproblem.php?pid=2546 Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如 ...

  4. HDOJ 1864 最大报销额(01背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=1864 最大报销额 Time Limit: 1000/1000 MS (Java/Others)    Memor ...

  5. HDOJ 2955 Robberies (01背包)

    10397780 2014-03-26 00:13:51 Accepted 2955 46MS 480K 676 B C++ 泽泽 http://acm.hdu.edu.cn/showproblem. ...

  6. 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 ...

  7. HDOJ 1596

    9899828 2013-12-27 16:42:37 Accepted 1596 3312MS 6668K 711 B C++ 泽泽 floyed暴力 #include<cstdio> ...

  8. HDOJ 1863 prim算法 HDOJ 1879

    #include<cstdio> #include<cstring> #define inf 0xffffff ][]; int ans; void prim(int n) { ...

  9. HDOJ 2066 floyed优化算法

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

随机推荐

  1. Scott Hanselman的问题-2

    .Net程序员面试 每个人都应知道篇 (回答Scott Hanselman的问题)   昨天回答了Scott Hanselman在他清单上关于C#那部分的题目,.Net 程序员面试 C# 语言篇 (回 ...

  2. 漫漫人生路,学点Jakarta基础-Java8函数式编程

    接口默认方法 Java8版本以后新增了接口的默认方法,不仅仅只能包含抽象方法,接口也可以包含若干个实例方法.在接口内定义实例方法(但是注意需要使用default关键字) 在此定义的方法并非抽象方法,而 ...

  3. Vagrant 和 docker

    Docker应用实践 http://dockerone.com/article/146 Vagrant 适合用来管理虚拟机,而docker适合用来管理应用环境 http://www.linuxidc. ...

  4. 源码安装 ipython

    https://blog.csdn.net/huobanjishijian/article/details/51470898

  5. Git学习总结(2)——初识 GitHub

    1. 写在前面 我一直认为 GitHub 是程序员必备技能,程序员应该没有不知道 GitHub 的才对,没想到这两天留言里给我留言最多的就是想让我写关于 GitHub 的教程,说看了不少资料还是一头雾 ...

  6. [Angular & Unit Testing] Automatic change detection

    When you testing Component rendering, you often needs to call: fixture.detectChanges(); For example: ...

  7. POJ 2828 线段树单点更新 离线搞

    Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get ...

  8. Leetcode:signal_number_ii

    一.     题目 给一个数组,当中仅仅有一个数出现一次.其它的数都出现3次,请找出这个数.要求时间复杂度是O(n).空间复杂度O(1). 二.     分析 第一次遇见这种题,真心没思路-.前面的s ...

  9. Windows 98 二十岁了,这些功能都是从它开始的(虽然 Windows 98 不如 Windows 95 那样具有革命性,但完成度更高,更加成熟。到最后还是:相见不如怀念。)

    1998 年 6 月 25 日午夜,美国著名连锁零售店 CompUSA 门外挤满了狂热的消费者和媒体,他们在等待一款软件发售:Windows 98,即使明知它要到当天早上才正式上市. ▲ 在 Comp ...

  10. metadata 和 routing

    虽然在刚开始源码概述时把代码分为分布式和数据两部分,但是它们的界限并不明显.之前这几篇可以说是这两部分的衔接.我们在快速接近数据(index)部分.本篇分析一下之前分析cluster遗留下的问题:Me ...