BZOJ 2144 跳跳棋
2144: 跳跳棋
Description
跳跳棋是在一条数轴上进行的。棋子只能摆在整点上。每个点不能摆超过一个棋子。我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置。我们要通过最少的跳动把他们的位置移动成x,y,z。(棋子是没有区别的)跳动的规则很简单,任意选一颗棋子,对一颗中轴棋子跳动。跳动后两颗棋子距离不变。一次只允许跳过1颗棋子。 写一个程序,首先判断是否可以完成任务。如果可以,输出最少需要的跳动次数。
Input
第一行包含三个整数,表示当前棋子的位置a b c。(互不相同)第二行包含三个整数,表示目标位置x y z。(互不相同)
Output
如果无解,输出一行NO。如果可以到达,第一行输出YES,第二行输出最少步数。
Sample Input
0 3 5
Sample Output
2
【范围】
100% 绝对值不超过10^9
1 /************************************************************** 2 Problem: 2144 3 User: Doggu 4 Language: C++ 5 Result: Accepted 6 Time:0 ms 7 Memory:820 kb 8 ****************************************************************/ 9 10 #include <cstdio> 11 #include <algorithm> 12 struct data {int pos[4];}a,b; 13 int dep=0; 14 bool operator!=(data a,data b) {for( int i = 1; i <= 3; i++ ) if(a.pos[i]!=b.pos[i]) return 1;return 0;} 15 data cal(data x,int heig) { 16 while(heig) { 17 int d1=x.pos[2]-x.pos[1], d2=x.pos[3]-x.pos[2]; 18 if(d1==d2) return x; 19 if(d1<d2) { 20 int t=std::min(heig,(d2-1)/d1); 21 heig-=t;dep+=t; 22 x.pos[1]+=t*d1;x.pos[2]+=t*d1; 23 } else { 24 int t=std::min(heig,(d1-1)/d2); 25 heig-=t;dep+=t; 26 x.pos[2]-=t*d2;x.pos[3]-=t*d2; 27 } 28 } 29 return x; 30 } 31 int main() { 32 for( int i = 1; i <= 3; i++ ) scanf("%d",&a.pos[i]); 33 for( int i = 1; i <= 3; i++ ) scanf("%d",&b.pos[i]); 34 std::sort(a.pos+1,a.pos+4);std::sort(b.pos+1,b.pos+4); 35 data t1=cal(a,0x3f3f3f3f);int d1=dep;dep=0; 36 data t2=cal(b,0x3f3f3f3f);int d2=dep;dep=0; 37 if(t1!=t2) printf("NO\n"), std::exit(0); 38 if(d1<d2) std::swap(d1,d2), std::swap(a,b); 39 int ans=d1-d2;a=cal(a,ans); 40 int lf=0, rg=d2; 41 while(lf<=rg) { 42 int mid=(lf+rg)>>1; 43 if(cal(a,mid)!=cal(b,mid)) lf=mid+1; 44 else rg=mid-1; 45 } 46 printf("YES\n%d\n",ans+2*lf); 47 return 0; 48 } 49
模型架构
转载于:https://www.cnblogs.com/Doggu/p/bzoj2144.html
BZOJ 2144 跳跳棋相关推荐
- BZOJ 2144 跳跳棋(神仙建模题,倍增 LCA,二分)【BZOJ修复工程】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2144 是 hydro 的 BZOJ ...
- BZOJ 2144 跳跳棋(LCA+欧几里德+二分答案)
跳跳棋 问题描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子.我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.我们要通过最少的跳动把他们的位 ...
- [bzoj2144]: 跳跳棋
2144: 跳跳棋 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 689 Solved: 326 [Submit][Status][Discuss ...
- bzoj-2144 跳跳棋
2144: 跳跳棋 题目链接 时间限制: 10 Sec 内存限制: 259 MB 题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子.我们用跳跳棋来做一 个简单的游戏: ...
- 跳跳棋(国家集训队,LCA,洛谷P1852,BZOJ[2144])
文章目录 题目 思路 代码 题目 题目链接 描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子.我们用跳跳棋来做一个简单的游戏:棋盘上有333颗棋子,分别在a,b,ca,b ...
- 【BZOJ - 2144】跳跳棋
@跳跳棋@ @跳跳棋@ @题目描述@ @分析1@ @分析2@ @代码实现@ @END~@ @题目描述@ Description 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子 ...
- [BZOJ2144]国家集训队 跳跳棋
题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.我们要通过最少的跳动把他们的位置移动 ...
- [数论系列一]C Looooops,跳跳棋,The Luckiest number,CF906D Power Tower,Minimal Power of Prime,仪仗队,LCMSUM
文章目录 C Looooops description solution code 跳跳棋 description solution code The Luckiest number descript ...
- 洛谷 P1852 [国家集训队] 跳跳棋
题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.我们要通过最少的跳动把他们的位置移动 ...
最新文章
- 7个IntelliJ IDEA必备插件,提高编码效率
- win10pin不可用进不去系统_解决win7系统下连接网络打印机不可用的处理方法
- 数据探索性分析_探索性数据分析
- Windows、Linux及Mac查看端口和杀死进程
- 极简代码(二)—— 转置 list of lists
- linux avi 转mp4,LINUX下有没有像格式工厂一样的媒体转换软件?比如RMVB转AVI 转MP4...
- [网络应用]Foobar2000界面入门:认识Foobar的UI系统,熟悉三种主流界面插件
- 可爱的HOOk技术(一)
- 基于ESP-IDF环境的ESP32-C3开发之No such file or directory
- Generative Adversarial Networks overview(1)
- 网安学习——信息收集
- 蓝桥杯 连续区间数(抖机灵做法)
- 用计算机弹歌旧梦一场歌词,早知惊鸿一场何必情深一往是什么歌 《旧梦一场》歌词哪里听...
- 如何对Hive Metastore进行权限控制
- 有哪些小而美的中小厂?
- 【Unity基础】人物控制的三种方式(键盘)、(鼠标)、(键鼠)
- html5的技术串讲,Web前端开发职业标准串讲(初级).pdf
- vue使用高德地图为信息窗体再添加点击事件
- 魅族手机突然显示无服务器,魅族Flyme6是悟空请来的?Bug竟然有这么多?
- CIE1964标准色度系统
热门文章
- 如何选择一个合适的物联网模块
- php文件更名,php如何批量给文件改名
- 天津大学计算机学院课表,天津大学软件实践1汇编语言课程教学大纲-天津大学计算机学院.PDF...
- 安恒 web类这可不是难题_如何消除您的前5个Web设计难题
- C#练习题答案: 字母战争 - 核打击【难度:3级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战
- Mac解压rar文件工具
- UVALive - 2911 Maximum
- windows10网速监控(netspeedmonitor)
- 【BZOJ2563】阿狸和桃子的游戏 贪心
- (6)JsonResponse, Cookie, Session