正题

题目链接:https://www.luogu.com.cn/problem/CF1066F


题目大意

平面上有nnn个点,每个点在max(x,y)max(x,y)max(x,y)层,走第kkk层的点之前一定要先走前面层的点,求走完所有点的最短路。


解题思路

对于每一层来说,我们可以将其看成一条直线,那么我们走某一层一定是先走到最边上的点再走到另一边最边上的点,因为如果这两个点也是必走的,如果没有走到这个点不行,如果走到了这个点,那么这边的所有点一定已经走到过。

所以排序来做即可


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define ll long long
using namespace std;
const ll N=2e6+10;
ll n,cnt,x[N],y[N],z[N],b[N*2];
ll mx[N],mn[N],f[N],dmin,dmax;
vector<ll> q[N];
ll get_dis(ll x1,ll y1,ll x2,ll y2)
{return abs(x1-x2)+abs(y1-y2);}
int main()
{scanf("%lld",&n);for(ll i=1;i<=n;i++){scanf("%lld%lld",&x[i],&y[i]);b[++cnt]=x[i];b[++cnt]=y[i];}sort(b+1,b+1+cnt);cnt=unique(b+1,b+1+cnt)-b-1;for(ll i=1;i<=n;i++){x[i]=lower_bound(b+1,b+1+cnt,x[i])-b;y[i]=lower_bound(b+1,b+1+cnt,y[i])-b;ll k=max(x[i],y[i]);if(x[i]==k)    q[k].push_back(z[i]=b[k]-b[y[i]]);else q[k].push_back(z[i]=b[x[i]]-b[k]);if(z[i]>z[mx[k]]||!mx[k])mx[k]=i;if(z[i]<z[mn[k]]||!mn[k])mn[k]=i;}ll last=0;for(ll i=1;i<=cnt;i++){if(q[i].empty())continue; sort(q[i].begin(),q[i].end());for(ll j=0;j<q[i].size();j++){ll xx,yy;if(q[i][j]<0)yy=b[i],xx=q[i][j]+b[i];else xx=b[i],yy=b[i]-q[i][j];f[j]=min(dmax+get_dis(xx,yy,b[x[mx[last]]],b[y[mx[last]]]),dmin+get_dis(xx,yy,b[x[mn[last]]],b[y[mn[last]]]));}dmax=dmin=1e18;for(ll j=0;j<q[i].size();j++){dmax=min(dmax,f[j]+q[i][j]+z[mx[i]]-2*z[mn[i]]);dmin=min(dmin,f[j]+z[mx[i]]*2-q[i][j]-z[mn[i]]);}last=i;}printf("%lld",min(dmax,dmin));
}

CF1066F-Yet another 2D Walking【贪心】相关推荐

  1. CF1066F Yet another 2D Walking

    DP 由图可以知道优先级相同的点都在一个"7"字形中 所以在走当前的优先级的点时最好从右下的点走到左上的点,或从从左上的点走到右下的点 那记dp[i][0]表示在走完第i个优先级时 ...

  2. matlab 棍,双足机器人行走棍图怎么用MATLAB画出来

    匿名用户 1级 2016-05-25 回答 The following is a function I wrote to generate a stick diagram of robot motio ...

  3. 第一篇----行走控制的研究现状:双足机器人四足机器人

    最近打算入门双足机器人.四足机器人,通过在网上搜索,整理一份比较全面的介绍目前发展状况的资料. 需要关注的几个学术大牛人物 Marc Raibert 网站为:MIT Leg Laboratory, 网 ...

  4. Unity 2D游戏开发教程之游戏中精灵的跳跃状态

    Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却 ...

  5. Unity 2D游戏开发教程之精灵的死亡和重生

    Unity 2D游戏开发教程之精灵的死亡和重生 精灵的死亡和重生 目前为止,游戏项目里的精灵只有Idle和Walking这两种状态.也就是说,无论精灵在游戏里做什么,它都不会进入其它的状态,如死亡.于 ...

  6. ​Unity 2D游戏开发教程之2D游戏的运行效果

    ​Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑 ...

  7. Unity 2D游戏开发教程之使用脚本实现游戏逻辑

    Unity 2D游戏开发教程之使用脚本实现游戏逻辑 使用脚本实现游戏逻辑 通过上一节的操作,我们不仅创建了精灵的动画,还设置了动画的过渡条件,最终使得精灵得以按照我们的意愿,进入我们所指定的动画状态. ...

  8. 数据结构——马踏棋盘题解(贪心算法)

    本文转自: https://blog.csdn.net/qq_41596568/article/details/83060317 数据结构--马踏棋盘题解(贪心算法) 使用循环建立棋盘与权值棋盘(权值 ...

  9. Unity 2D游戏开发教程之2D游戏的运行效果

    Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑问 ...

最新文章

  1. Kubernetes — Overview
  2. 华为云计算之储存基础知识
  3. PyCharm-professional-2018.2.2 - 破解
  4. 20155117王震宇 2006-2007-2 《Java程序设计》第5周学习总结
  5. HTML5学习笔记---Html5简单理解,发展情况...
  6. ROS 日志消息(C++)
  7. 百度的搜索好厉害,刚刚发文就能搜索到
  8. 《机械制造工艺学》课程设计任务书
  9. 使用Eclipse设置java源代码 连接
  10. UE4开发学习笔记(双人游戏共享视角,共享相机)
  11. Docker部署各种服务
  12. 计算机网络_实验5_集线器与交换机对比
  13. 程序员,隐藏的段子手
  14. python将doc导入数据库_用python将路径文件导入mysql数据库表
  15. win10彻底永久关闭自动更新【亲测有效】
  16. 某工控图片上传服务 CPU 爆高分析
  17. html文本框颜色填充颜色设置,文本框填充色怎么设置
  18. 基于ESP8266的智能家庭检测系统
  19. Linux网络相关问题
  20. 基于嵌入式linux 的蓝牙通信系统设计与实现的研究意义,嵌入式Linux操作系统通信管理机的设计研究...

热门文章

  1. 面试被问到Java 静态代理/动态代理?不用怕,这样子就可以!!
  2. java if or android_RxJava switchIfEmpty操作符实现Android检查本地缓存逻辑判断
  3. python判断列表是否为空_Jinja2: 判断返回的列表是否为空
  4. java面试题_阿里大厂流出的数百道 Java 经典面试题
  5. 算法设计与分析——分支限界法——装载问题
  6. java class类型参数_使用Class对象实例化Java类型参数/ generic
  7. 磁带最优存储问题java实现_磁带的最优存储问题(贪心选择)
  8. leetcode139. 单词拆分
  9. 1010 Lehmer Code (35 分)(思路+详解+树状数组的学习+逆序对+map+vector) 超级详细 Come baby!!!
  10. java servlet jsp javabean关系图_Servlet+JSP+JavaBean开发模式(MVC)介绍