【LCA】bzoj 2144:跳跳棋
2144: 跳跳棋
Time Limit: 10 Sec Memory Limit: 259 MB
Submit: 248 Solved: 121
[Submit][Status][Discuss]
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
- #include<cstdio>
- #include<cstring>
- #include<cmath>
- #include<algorithm>
- using namespace std;
- inline int in()
- {
- int x=,f=;char ch=getchar();
- while((ch<''||ch>'')&&ch!='-')ch=getchar();
- if(ch=='-')f=-,ch=getchar();
- while(ch<=''&&ch>='')x=x*+ch-'',ch=getchar();
- return x*f;
- }
- struct data{
- int a[];
- };
- int a[],b[],tem=;
- data up(int c[],int k)
- {
- data t;
- int t1=c[]-c[],t2=c[]-c[];
- for(int i=;i<=;i++)t.a[i]=c[i];
- if(t1==t2)return t;
- else if(t1<t2)
- {
- int ans=min(k,(t2-)/t1);
- tem+=ans;k-=ans;
- t.a[]+=ans*t1,t.a[]+=ans*t1;
- }
- else
- {
- int ans=min(k,(t1-)/t2);
- tem+=ans,k-=ans;
- t.a[]-=ans*t2,t.a[]-=ans*t2;
- }
- if(k)return up(t.a,k);
- else return t;
- }
- bool operator!=(data a,data b)
- {
- for(int i=;i<=;i++)if(a.a[i]!=b.a[i])return ;
- return ;
- }
- int main()
- {
- for(int i=;i<=;i++)a[i]=in();
- for(int j=;j<=;j++)b[j]=in();
- sort(+a,+a+);
- sort(+b,+b+);
- data t1=up(a,1e9);int d1=tem;tem=;
- data t2=up(b,1e9);int d2=tem;tem=;
- if(t1!=t2){
- printf("NO");
- return ;
- }
- if(d1>d2)
- {
- swap(d1,d2);
- for(int i=;i<=;i++)swap(a[i],b[i]);
- }
- int ans=d2-d1;
- t1=up(b,ans);
- for(int i=;i<=;i++)b[i]=t1.a[i];
- int l=,r=d1,res;
- while(l<=r)
- {
- int mid=(l+r)>>;
- if(up(a,mid)!=up(b,mid))l=mid+;
- else r=mid-,res=mid;
- }
- printf("YES\n");
- printf("%d",ans+*res);
- return ;
- }
【LCA】bzoj 2144:跳跳棋的更多相关文章
- [BZOJ 2144]跳跳棋
Description 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子.我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.我们要通过最少的跳动把他 ...
- bzoj 2144: 跳跳棋——倍增/二分
Description 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子.我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.我们要通过最少的跳动把他 ...
- 【BZOJ 2144】 2144: 跳跳棋 (倍增LCA)
2144: 跳跳棋 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 642 Solved: 307 Description 跳跳棋是在一条数轴上进行的 ...
- 【bzoj2144】跳跳棋
2144: 跳跳棋 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 492 Solved: 244[Submit][Status][Discuss] ...
- BZOJ2144跳跳棋——LCA+二分
题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子.我们用跳跳棋来做一个简单的 游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.我们要通过最少的跳动把他们的位置移动 ...
- 【洛谷】1852:[国家集训队]跳跳棋【LCA】【倍增?】
P1852 [国家集训队]跳跳棋 题目背景 原<奇怪的字符串>请前往 P2543 题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个 ...
- 跳跳棋——二分+建模LCA
题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.我们要通过最少的跳动把他们的位置移动 ...
- 不一样的LCA——luoguP1852跳跳棋
洛谷端题目链接 loj端题目链接 题目大意: 在一条数轴上进行跳跳棋游戏.棋子只能摆在整点上.每个点不能摆超过一个棋子.用跳跳棋完成:棋盘上有3颗棋子,分别在a,b,c这三个位置.我们要通过最少的跳动 ...
- P1852 跳跳棋 [LCA思想+二分答案]
题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有\(3\)颗棋子,分别在\(a,b,c\)这三个位置.我们要通过最少的跳动 ...
随机推荐
- Java Concurrency - 浅析 CountDownLatch 的用法
The Java concurrency API provides a class that allows one or more threads to wait until a set of ope ...
- Commons CLI - Option Properties
Option Properties The following are the properties that each Option has. All of these can be set usi ...
- Jersey(1.19.1) - Client API, Testing services
The Jersey client API was originally developed to aid the testing of the Jersey server-side, primari ...
- HttpClient(4.3.5) - HTTP Entity
HTTP entity HTTP messages can carry a content entity associated with the request or response. Entiti ...
- Linux 命令 - uniq: 通知或忽略重复行
给定一个已排好序的文件,uniq 会删除重复行并将结果输出到标准输出中.uniq 通常与 sort 结合使用以删除 sort 输出内容中的重复行. 命令格式 uniq [OPTION]... [INP ...
- 获得随机的n条结果行
* FROM [Menu] order by NEWID() * FROM [Menu]
- C# 网页信息采集(数据访问)
windows nt/xp/2003 or above .net Framework 1.1 SqlServer 2000 开发环境 VS 2003 目的 学习了网络编程,总要做点什么东西才好. 于是 ...
- PullToRefreshListView手动刷新问题
1.第一次进入界面刷新无效,需要延时刷新 new Handler().postDelayed(new Runnable() { @Override public void run() { // TOD ...
- css3学习笔记之渐变
CSS3 线性渐变 语法 background: linear-gradient(direction, color-stop1, color-stop2, ...); 1 2 3 4 5 6 7 8 ...
- XML格式以及相关libxml库学习
本文参考 XML文件格式语法以及DTD,摘除其中自己认为必要的知识点,在此记录如下. 先给出一个xml的实例文件, <?xml version="1.0" encoding= ...