Description

跳跳棋是在一条数轴上进行的。棋子只能摆在整点上。每个点不能摆超过一个棋子。我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置。我们要通过最少的跳动把他们的位置移动成x,y,z。(棋子是没有区别的)跳动的规则很简单,任意选一颗棋子,对一颗中轴棋子跳动。跳动后两颗棋子距离不变。一次只允许跳过1颗棋子。 写一个程序,首先判断是否可以完成任务。如果可以,输出最少需要的跳动次数。

Input

第一行包含三个整数,表示当前棋子的位置a b c。(互不相同)第二行包含三个整数,表示目标位置x y z。(互不相同)

Output

如果无解,输出一行NO。如果可以到达,第一行输出YES,第二行输出最少步数。

Sample Input

1 2 3
0 3 5

Sample Output

YES
2

【范围】
100% 绝对值不超过10^9

正解:倍增lca

为了方便研究跳法,我们把棋子按坐标大小排序。我们发现,当中间那粒棋子与左边的距离和与右边的距离不相等时,有3种跳法,而两者距离相等时,只有两种跳法。所以,对于往中间跳的跳法,我们可以把它理解成在树上跳父亲,而对于往旁边跳,我们可以理解成在树上跳儿子。所以我们就可以把题意转化一下,即第一问为两种状态是否有lca,而第二种则是问两种状态在树上的距离。我们可以采用类似倍增的方法跳lca,来求出答案。

//It is made by wfj_2048~
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#define inf 1<<30
#define il inline
#define RG register
#define ll long longusing namespace std;struct data{int a,b,c;bool operator != (const data &x) const{return a!=x.a || b!=x.b || c!=x.c;}
};int a[2][5],depa,depb;il int gi(){RG int x=0,q=0; RG char ch=getchar();while ((ch<'0' || ch>'9') && ch!='-') ch=getchar(); if (ch=='-') q=1,ch=getchar();while (ch>='0' && ch<='9') x=x*10+ch-48,ch=getchar(); return q ? -x : x;
}il data find(RG data u,RG int k,RG int &dep){RG int dis1=u.b-u.a,dis2=u.c-u.b,t; if (dis1==dis2) return u;if (dis1<dis2) t=min(k,(dis2-1)/dis1),k-=t,dep+=t,u.a+=t*dis1,u.b+=t*dis1;else t=min(k,(dis1-1)/dis2),k-=t,dep+=t,u.b-=t*dis2,u.c-=t*dis2;if (k) return find(u,k,dep); else return u;
}il void work(){for (RG int i=1;i<=3;++i) a[0][i]=gi();sort(a[0]+1,a[0]+4); for (RG int i=1;i<=3;++i) a[1][i]=gi();sort(a[1]+1,a[1]+4);data x=(data){a[0][1],a[0][2],a[0][3]},y=(data){a[1][1],a[1][2],a[1][3]},u=find(x,inf,depa),v=find(y,inf,depb);if (u!=v){ puts("NO"); return; } puts("YES"); if (depa<depb) swap(x,y),swap(depa,depb);RG int l=0,r=depb,mid,cnt,ans,Ans=depa-depb; x=find(x,Ans,cnt);while (l<=r){mid=(l+r)>>1;RG data x1=find(x,mid,cnt),y1=find(y,mid,cnt);if (x1!=y1) l=mid+1; else ans=mid,r=mid-1;}printf("%d\n",Ans+2*ans); return;
}int main(){work();return 0;
}

bzoj2144 【国家集训队2011】跳跳棋相关推荐

  1. [国家集训队2011]跳跳棋

    P1852 [国家集训队]跳跳棋https://www.luogu.org/problemnew/show/P1852 Description 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不 ...

  2. [BZOJ2144]国家集训队 跳跳棋

    题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.我们要通过最少的跳动把他们的位置移动 ...

  3. bzoj2144 [2011集训队出题] 跳跳棋 倍增 lca

    Description 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.我们要通过最少的跳动把 ...

  4. happiness[国家集训队2011(吴确)]

    [试题来源] 2011中国国家集训队命题答辩 [问题描述] 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科 ...

  5. 国家集训队2011 happiness

    [试题来源] 2011中国国家集训队命题答辩 [问题描述] 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科 ...

  6. 题解 【国家集训队2011】数颜色

    题面 解析 这题也就是一个带修改的莫队啊啊!! 所以,我们只需要在普通莫队上加上一维时间即可. 怎么加呢? 只需要记录下每次修改和查询的时间, 在左右端点跳跃的同时,也将时间跳到询问的时间就行了. 具 ...

  7. 【COGS 1873】 [国家集训队2011]happiness(吴确) 最小割

    这是一种最小割模型,就是对称三角,中间双向边,我们必须满足其最小割就是满足题目条件的互斥关系的最小舍弃,在这道题里面我们S表示文T表示理,中间一排点是每个人,每个人向两边连其选文或者选理的价值,中间每 ...

  8. 【国家集训队2011】【BZOJ2141】排队

    Description 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家乐和和.红星幼儿园的小朋友们排起了长长地队伍,准备吃果果.不过因为小朋友们的 ...

  9. [国家集训队2011]稳定婚姻(无向图定向)

    题目描述 我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有关. 25岁的姗姗和男友谈恋爱半年就结婚,结婚不到 ...

最新文章

  1. Leetcode 764. Largest Plus Sign
  2. asp.net模糊查询存储过程
  3. 算法设计与分析(第三周)递归实现全排列问题
  4. jQuery 图片轮流展示效果
  5. linux 下自动重启tomcat的脚本(支持shell杀进程)
  6. 数据结构实践项目——图的基本运算及遍历操作
  7. ElementUI:nav收起后点击后出现黑色边框
  8. oracle 没有rlwap,[20140723]安装使用anysql.txt
  9. 增加特征对预测准确率的影响
  10. 2021-05-11
  11. 英特尔®以太网700系列的动态设备个性化
  12. pyqt+pyqtgraph+lka(界面制作)--优化版
  13. 50V升压恒流LED驱动芯片
  14. 小失误点,不积跬步无以至千里
  15. 当封号成为一种常态,网络营销人该何去何从?
  16. python贺卡编程_一种卡片编程机及其编程方法与流程
  17. 苹果电脑/macbookpro 拔出电源充电器但还是显示充电的解决办法
  18. 重要接口关键词搜索——item_search-按关键字搜索淘宝商品
  19. day25/RegexDemo1.java
  20. 基于微信小程序云开(统计学生信息并导出excel)

热门文章

  1. JS基础:变量、函数、对象、数组、循环、选择(判断)
  2. NETCONF协议详解
  3. 人工智能Ai芯片层出不穷,GPU、FPGA、ASIC用于人工智能的优势和劣势对比
  4. AI芯片的评价指标和对比(CPU/GPU/ASIC/FPGA)
  5. 微信PC端无法拖入文件
  6. Unity Shader 变体处理与预加载流程
  7. 计算机怎么系统学,怎么学习计算机?
  8. CISP真题-CISE-CISO方向
  9. 创新型产品的需求发现
  10. WPS Excel学习记录(Continue)