不死「火鸟 −凤翼天翔−」

题目背景

拥有了「不死」的能力的藤原妹红,同时获得了操纵火焰的力量,是不死鸟的化身。

不死鸟,和凤凰是同一种生物吗?

题目描述

妹红可以操纵火鸟。火鸟可以看作在边长无限大的棋盘上放置着的一枚棋子 AAAAAA 位于 (x1,y1)(x_1,y_1)(x1,y1) 处。AAA 以如下规则移动:

  • 在奇数次移动时,AAA 只能向右上或者左下移动一格,如下图红色箭头;
  • 在偶数次移动时,AAA 只能向右下或者左上移动一格,如下图蓝色箭头。

由于棋盘无限大,因此 x,yx,yx,y 的取值可以为负数。

每一步行动时 AAA 不能待在原地不移动。现在需要把 AAA 移动到坐标为 (x2,y2)(x_2,y_2)(x2,y2)BBB 位置,最少要多少步?特别地,若不存在这样的方案,输出 −1-11

如下图所示是 A=(2,7)A=(2,7)A=(2,7)B=(5,2)B=(5,2)B=(5,2) 的情况。一种移动次数最小的方案已在图上标出,需要 999 步。红色线段表示奇数次的移动,蓝色线段表示偶数次的移动。

输入格式

输入共一行四个整数 x1,y1,x2,y2x_1,y_1,x_2,y_2x1,y1,x2,y2,描述 A,BA,BA,B 的坐标。

输出格式

输出共一行一个整数。如果存在一条从 AAABBB 的移动方案,输出移动的最小步数;否则输出 −1-11

样例 #1

样例输入 #1

2 7 5 2

样例输出 #1

9

样例 #2

样例输入 #2

2 2 3 2

样例输出 #2

-1

样例 #3

样例输入 #3

0 0 1000000000 1000000000

样例输出 #3

2000000000

提示

数据范围及约定

对于全部数据,保证 0≤x1,y1,x2,y2≤1090\le x_1,y_1,x_2,y_2\le 10^90x1,y1,x2,y2109

C++实现

#include
#include
#define int long long
using namespace std;
signed main()
{
int a,b,c,d;
cin>>a>>b>>c>>d;
if((a+b)%2!=(c+d)%2)cout<<-1<<endl;
else if((int)(abs(a-c))%2==0)
cout<<abs(a-c)+abs(b-d)<<endl;
else
cout<<min(abs(a-(c+1))+abs(b-(d+1))+1,abs(a-(c-1))+abs(b-(d-1))+1)<<endl;
return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

Logo

2万人民币佣金等你来拿,中德社区发起者X.Lab,联合德国优秀企业对接开发项目,领取项目得佣金!!!

更多推荐