题目:

http://www.codeforces.com/contest/617/problem/C

自己感觉是挺有新意的一个题目, 乍一看挺难得(= =)。

其实比较容易想到的一个笨办法就是:分别计算出每个点到喷泉的距离,然后分别按照距离远近排序(要用到两个数组),然后选定一个喷泉,从近到远依次选点,然后标记该点,从另一个喷泉中找到距离他最远且还没用被标记的点,这个距离加前一个喷泉的距离就是要求的答案,选最小的即可,n方的时间复杂度。

需要注意的几点:

1、         对于每个点最好用结构体,保存距离的同时保存坐标。因为后面涉及到对两个数组进行排序,排序后还要从第二个喷泉对应的数组中找到与第一个喷泉所选的同一个点。这两个数组的排序是不同的,所以需要根据坐标寻找。

2、         用于标记的数组一定是先从第二个喷泉对应数组找到点,对这个的点的下标进行标记。

3、         有一种特殊情况是,第一个喷泉距离为0,第二个喷泉完全覆盖所有点。

  1. #include<stdio.h>
  2. #include<algorithm>
  3. #define maxn 2005
  4. using namespace std;
  5.  
  6. struct node{
  7. int x;
  8. int y;
  9. long long d;
  10. };
  11. node d1[maxn];
  12. node d2[maxn];
  13. int book[maxn];
  14. long long n,x1,y1,x2,y2;
  15. //快排
  16. void quicksort(int left,int right,node d[]){
  17. if(left>right)
  18. return;
  19. int i = left,j = right;
  20. node temp = d[left];
  21. while(i!=j){
  22. while(d[j].d>=temp.d && i<j)
  23. j--;
  24. while(d[i].d<=temp.d && i<j)
  25. i++;
  26. if(i<j){
  27. node t = d[i];
  28. d[i] = d[j];
  29. d[j] = t;
  30. }
  31. }
  32. d[left] = d[i];
  33. d[i] = temp;
  34.  
  35. quicksort(left,i-,d);
  36. quicksort(i+,right,d);
  37. }
  38. //保存点与计算距离
  39. void getd(long long x,long long y,int index){
  40. d1[index].x = x;
  41.  
  42. d1[index].y = y;
  43. d2[index].x = x;
  44. d2[index].y = y;
  45. d1[index].d = (x-x1)*(x-x1) + (y-y1)*(y-y1);
  46. d2[index].d = (x-x2)*(x-x2) + (y-y2)*(y-y2);
  47. }
  48. int main(){
  49. scanf("%I64d%I64d%I64d%I64d%I64d",&n,&x1,&y1,&x2,&y2);
  50. for(int i = ;i<n;i++){
  51. long long x,y;
  52. scanf("%I64d%I64d",&x,&y);
  53. getd(x,y,i);
  54. }
  55.  
  56. quicksort(,n-,d1);
  57. quicksort(,n-,d2);
  58.  
  59. long long ans = d2[n-].d;//特殊情况,第二个喷泉全部覆盖
  60. for(int i = ;i<n;i++){
  61. for(int j = ;j<n;j++){//从第二个数组里寻找
  62. if(d1[i].x == d2[j].x && d1[i].y == d2[j].y){
  63. book[j] = ;
  64. break;
  65. }
  66. }
  67. //找到第二个数组里最大的未标记的点
  68. int t = n-;
  69. while(book[t] == && t>=){
  70. t--;
  71. }
  72. ans = min(ans,d1[i].d+d2[t].d);
  73. }
  74. printf("%I64d\n",ans);
  75. return ;
  76. }

Codeforces Round #340 Watering Flowers的更多相关文章

  1. [Codeforces Round #340 (Div. 2)]

    [Codeforces Round #340 (Div. 2)] vp了一场cf..(打不了深夜的场啊!!) A.Elephant 水题,直接贪心,能用5步走5步. B.Chocolate 乘法原理计 ...

  2. Codeforces Round #340 (Div. 2) C. Watering Flowers 暴力

    C. Watering Flowers 题目连接: http://www.codeforces.com/contest/617/problem/C Descriptionww.co A flowerb ...

  3. 「日常训练」Watering Flowers(Codeforces Round #340 Div.2 C)

    题意与分析 (CodeForces 617C) 题意是这样的:一个花圃中有若干花和两个喷泉,你可以调节水的压力使得两个喷泉各自分别以\(r_1\)和\(r_2\)为最远距离向外喷水.你需要调整\(r_ ...

  4. Codeforces Round #340 (Div. 2) E. XOR and Favorite Number 莫队算法

    E. XOR and Favorite Number 题目连接: http://www.codeforces.com/contest/617/problem/E Descriptionww.co Bo ...

  5. Codeforces Round #340 (Div. 2) B. Chocolate 水题

    B. Chocolate 题目连接: http://www.codeforces.com/contest/617/problem/D Descriptionww.co Bob loves everyt ...

  6. Codeforces Round #340 (Div. 2) A. Elephant 水题

    A. Elephant 题目连接: http://www.codeforces.com/contest/617/problem/A Descriptionww.co An elephant decid ...

  7. Codeforces Round #340 (Div. 2) D. Polyline 水题

    D. Polyline 题目连接: http://www.codeforces.com/contest/617/problem/D Descriptionww.co There are three p ...

  8. Codeforces Round #340 (Div. 2) E. XOR and Favorite Number 【莫队算法 + 异或和前缀和的巧妙】

    任意门:http://codeforces.com/problemset/problem/617/E E. XOR and Favorite Number time limit per test 4 ...

  9. Codeforces Round #340 (Div. 2) C

    Description A flowerbed has many flowers and two fountains. You can adjust the water pressure and se ...

随机推荐

  1. 云计算之KVM安装(二)

    云计算之KVM安装(二) 调整虚拟机 虚拟化Intel使用的是intel VT-X AMD使用的是AMD-V 创建虚拟机步骤 1.准备虚拟机硬盘 2.需要系统iso镜像 3.需要安装一个vnc的客户端 ...

  2. js001-JavaScript简介

    js001-JavaScript简介 1.             JavaScript实现 JavaScript 的三个重要组成部分如下图   1.1.ECMAScript 1.1.1    版本 ...

  3. mysql dump

    mysqldump wifi3 > wifi3.sql mysqldump wifi3 < wifi3.sql

  4. jquery输出ajax返回数据中的时间戳转化为日期时间的函数

    //第一种 function getLocalTime(nS) { ).toLocaleString().replace(/:\d{,}$/,' '); } alert(getLocalTime()) ...

  5. 英文分词算法(Porter stemmer)

    http://blog.csdn.net/whuslei/article/details/7398443 最近需要对英文进行分词处理,希望能够实现还原英文单词原型,比如 boys 变为 boy 等. ...

  6. Java数据结构——用双端链表实现队列

    //================================================= // File Name : LinkQueue_demo //---------------- ...

  7. HTML学习笔记——图片显示、图片跳转、图片相对路径

    1>显示图片.用a标签实现点击图片跳转.地图标签/点击图片上固定区域跳转 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...

  8. 隔离click事件

    有一些应用,不需要我们自己的定义的click函数,例如: $(document).on('click', '#inp', function(e){ alert('hello world!'); }); ...

  9. 部署lamp服务器

    系统:CentOS 6.5 64位 1.卸载旧版本软件 rpm -qa | grep mysql #查询是否已经安装MySQL,如有执行下面的操作将其全部删除 rpm -e mysql --nodep ...

  10. Yii2 打印sql语句和批量插入数据

    打印sql语句: $model->find()->createCommand()->getRawSql(); 批量插入 Yii::$app->db->createComm ...