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];



【完整代码】

  1. #include <cstdio>
  2. #include <cmath>
  3. #include <vector>
  4. #include <queue>
  5. using namespace std;
  6. const int MAXN = 400;
  7. struct point
  8. {
  9. double x,y;
  10. };
  11. vector <int> a[MAXN];
  12. vector <double> w[MAXN];
  13. queue <int> dl;
  14. bool inque[MAXN];
  15. double a0,b0;
  16. int n,m;
  17. point b[400],c[MAXN],goal;
  18. double f[MAXN];
  19. double sqr(double x)
  20. {
  21. return x*x;
  22. }
  23. double dis(point a,point b)
  24. {
  25. return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
  26. }
  27. double jue(double x)
  28. {
  29. if (x>0)
  30. return x;
  31. else
  32. return -x;
  33. }
  34. bool can(point a,point b,point c)
  35. {
  36. double dis1 = dis(a,b);
  37. double dis2 = dis(b,c);
  38. double dis3 = dis(a,c);
  39. dis1 = dis1+dis2;
  40. double judge =jue(dis1-dis3);
  41. if (judge<1e-4)
  42. return false;
  43. else
  44. return true;
  45. }
  46. int main()
  47. {
  48. //freopen("F:\\rush.txt","r",stdin);
  49. scanf("%lf%lf%d%d",&goal.x,&goal.y,&n,&m);
  50. for (int i = 1;i <= n;i++)
  51. scanf("%lf%lf",&b[i].x,&b[i].y);
  52. for (int i = 1;i <= m;i++)
  53. scanf("%lf%lf",&c[i].x,&c[i].y);
  54. for (int i = 1;i <= n;i++)
  55. for (int j = 1;j <= n;j++)
  56. if (i!=j)
  57. {
  58. bool ok = true;
  59. for (int k =1;k <= m;k++)
  60. if (!can(b[i],c[k],b[j]))
  61. {
  62. ok = false;
  63. break;
  64. }
  65. if (ok)
  66. {
  67. a[i].push_back(j);
  68. w[i].push_back(dis(b[i],b[j]));
  69. }
  70. }
  71. for (int i = 1;i <= n;i++)
  72. {
  73. a[i].push_back(0);
  74. w[i].push_back(2*dis(b[i],goal));
  75. }
  76. for (int i = 0;i <= n;i++)
  77. f[i] = 2100000000.0;
  78. f[1] = 0;
  79. dl.push(1);
  80. inque[1] = true;
  81. while (!dl.empty())
  82. {
  83. int x = dl.front();
  84. inque[x] = false;
  85. dl.pop();
  86. int len = a[x].size();
  87. for (int i = 0;i <= len-1;i++)
  88. {
  89. int y = a[x][i];
  90. double c = w[x][i];
  91. if (f[y]>f[x]+c)
  92. {
  93. f[y] = f[x] + c;
  94. if (!inque[y])
  95. {
  96. inque[y] = true;
  97. dl.push(y);
  98. }
  99. }
  100. }
  101. }
  102. printf("%.0lf\n",f[0]);
  103. return 0;
  104. }

【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. idle-实现清屏

    最近在学习python的时候,需要用到ubuntu的python idle.这个工具可以测试python语法.但是呢,在使用的过程中遇到了一个问题.就是随着你的输入,你会发现这个输入会停留在这个界面的 ...

  2. OpenCV —— 视频播放控制

    创建滚动条,实现滚动条随视频播放移动. #include "cv.h" #include "highgui.h" CvCapture* capture=NULL ...

  3. 体验域名注册解析与SSL证书

  4. FZU 1608 Huge Mission

    Huge Mission Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on FZU. Original I ...

  5. Android开源图表库XCL-Charts版本号公布及展示页

    XCL-Charts V2.1 Android开源图表库(XCL-Charts is a free charting library for Android platform.) XCL-Charts ...

  6. 漫话C++之string字符串类的使用(有汇编分析)

    C++中并不提倡继续使用C风格的字符串,而是为字符串定义了专门的类,名为string. 使用前的准备工作 在使用string类型时,需要包含string头文件,且string位于std命名空间内: # ...

  7. <memory>(包括了auto_ptr,shared_ptr等各种指针)

    Memory elements This header defines general utilities to manage dynamic memory: Allocators allocator ...

  8. Spider_selenium

    json模块 什么是json? javascript中的对象和数组 对象:{key:value}取值:对象名.key 数组:[...,...]取值:数组[索引值] 作用 json格式的字符串和Pyth ...

  9. Http协议的断点续传下载器,使用观察者模式监视下载进度,使用xml保存下载进度。

    下载使用Http协议,为了做到断点续传,在点击暂停后,将已下载的大小等数据通过Json存入xml中,当继续传输的时候从xml文件中读取大小继续下载(好几个月前写的,真的想不起来了) bool CHtt ...

  10. 洛谷 P3003 [USACO10DEC]苹果交货Apple Delivery

    洛谷 P3003 [USACO10DEC]苹果交货Apple Delivery 题目描述 Bessie has two crisp red apples to deliver to two of he ...