2778: 【入门】小 X 与机器人 (betago)

题目:

时间限制 : 1 Sec

内存限制 : 32 Mb

提交 : 943

解决 : 253

题目描述

小 X 最近对战胜韩国围棋大神李世石的 AlphaGo 很感兴趣,所以小 X 自己写了一个叫 做 BetaGo的人工智能程序(简称 AI) , 这个 BetaGo 会做什么呢?

小 X 首先想要让 BetaGo 做到自己在棋盘上落子, 这一点 AlphaGo 是由程序员来完成的。小 X 的设想是这样的: 在棋盘的边框上放置一个小机器人, 这个小机器人会沿着棋盘的边框移动到最接近落子点的位置,然后伸出它的机械臂将棋子放到棋盘上。 这里面最关键的一步是如何让小机器人在棋盘的边框上沿着最短的路径移动,小 X 想请你帮他编个程序解决这个问题。

众所周知,围棋棋盘大小为 19 ×  19(如下图所示) , 图中加粗的一圈即为边框。

我们用一对整数 (x, y) 来表示棋盘上第 x 条横线(从下往上数)与第 y 条竖线(从左往右数)的交叉点,如上图中边框上的 A 点用( 6, 1) 表示, B 点用 (10, 19) 表示,小机器人初始时放置在 (x1,y1) 这个位置上, 它想要移动到 (x2, y2) 这个位置上。 (x1, y1) 和(x2, y2) 一定是棋盘边框上的交叉点每一步小机器人可以从当前位置移动到相邻(上下左右)的某个位置上, 即每次可以从 (x, y) 移动到 (x - 1, y) 、 (x + 1, y) 、 (x, y - 1) 、 (x, y + 1) 四个位置中的一个, 但是它不能走出或走进棋盘,也就是说它只能沿着棋盘的边框移动到相邻位置, 这就意味着任一时刻相邻位置都恰好只有两个。

BetaGo 会告诉小机器人最少需要走多少步, 但小 X 还是很担心 BetaGo 有的时候会失控,从而告诉他一个错误值。

为此小 X 只好求助你, 希望你编一个程序计算从 (x1, y1) 沿着棋盘的边框移动到 (x2, y2) 最少需 要 走 多 少步 。 上 图 中 从 A 点 ( 6 , 1 ) 移 动 到 B 点 (10 , 19) 最 少需 要 走 32 步 , 移 动 路线 是 :( 6 , 1 ) → ( 5 , 1 ) → ( 4 , 1 ) → ( 3 , 1 ) → ( 2 , 1 ) → ( 1 , 1 ) → (1 , 2 ) → (1 , 3 ) →……→(1, 19) →(2, 19) →……→(10, 19)

输入

输入数据仅有一行包含四个用空格隔开的正整数表示 x1, y1, x2, y2。

数据保证 (x1, y1) , (x2, y2) 一定是棋盘边框上的交叉点。

输出

输出一行包含一个整数 ans, 表示小机器人从 (x1, y1) 移动到 (x2, y2) 的最少步数。

样例输入

6 1 10 19

样例输出

32

【数据范围】

对于 30%的数据, (x1, y1) , (x2, y2) 在同一条边框上

对于另外 30%的数据, (x1, y1) , (x2, y2) 在相邻的两条边框上

对于另外 40%的数据, (x1, y1) , (x2, y2) 在相对的两条边框上

【友情提醒】

在计算机语言中, 绝对值函数常记作 abs(x) , 绝对值函数的值一定大于等于 0, 其意义为 x 到 0的距离,如 3 到 0 的距离为 3, -3 到 0 的距离也是 3,所以 abs(3) =abs(-3) =3,一般地有 abs(x1-x2) =abs(x2-x1) =x1 到 x2 的距离。

方法:

1、三种情况:

(1)对面两个点【要分两路比较】

(2)相邻直线上的两个点【(x横坐标y纵坐标)abs(x1-x2)+abs(y1-y2)】

(3)同一条线上【判断,abs(x1-x2)或abs(y1-y2)]

标程:

#include<bits/stdc++.h>
using namespace std;
int a1,a2,b1,b2,ss,sy;
int main()
{
     cin>>a1>>a2>>b1>>b2;
     if (abs(a1-b1)==18)
     {
         ss=18+a2-1+b2-1;
         sy=18+19-a2+19-b2; 
     }
     if (abs(a2-b2)==18)
     {
         ss=18+a1-1+b1-1;
         sy=18+19-a1+19-b1; 
     }
     if (a1==b1)ss=abs(a2-b2);
     if (a2==b2)ss=abs(a1-b1);
     if (ss+sy==0)ss=abs(a1-b1)+abs(a2-b2);
     if ((ss>sy)&&(sy!=0))
     {
           cout<<sy; 
     }
     else cout<<ss;
     return 0;
}

时间: 2024-10-19 14:03:17

2778: 【入门】小 X 与机器人 (betago)的相关文章

小X与机器人 (betago) 题解

题目描述 小 X 最近对战胜韩国围棋大神李世石的 AlphaGo 很感兴趣,所以小 X 自己写了一个叫 做 BetaGo的人工智能程序(简称 AI) , 这个 BetaGo 会做什么呢? 小 X 首先想要让 BetaGo 做到自己在棋盘上落子, 这一点 AlphaGo 是由程序员来完成的.小 X 的设想是这样的: 在棋盘的边框上放置一个小机器人, 这个小机器人会沿着棋盘的边框移动到最接近落子点的位置,然后伸出它的机械臂将棋子放到棋盘上. 这里面最关键的一步是如何让小机器人在棋盘的边框上沿着最短的

Socket通信入门小实例

客户端: public class Client { private int port = 8000; private String host = "localhost"; private Socket socket; public Client() throws UnknownHostException, IOException { socket = new Socket(host, port); } public void readFromUser() throws IOExcep

R语言(入门小练习篇)

问题: 一组学生参加了数学.科学和英语考试.为了给所有的学生确定一个单一的成绩衡量指标,需要将这些科目的成绩组合起来.另外,还想将前20%的学生评定为A,接下来20%的学生评定为B,以此类推.最后,希望按字母顺序对学生排序. Excel中的数据表(自己一个个敲的,最讨厌做的事情TT) StuId StuName Math Science English 1 John Davis 502 95 25 2 Angela Williams 465 67 12 3 Bull Jones 621 78 2

WebService概述和CXF入门小程序

一. 什么是WedService? WebService不是框架, 甚至不是一种技术, 而是一种跨平台,跨语言的规范, WebService的出现是为了解决这样的需求场景: 不同平台, 不同语言所编写的应用之间相互调用. 二. WedService有什么用? WebService可以集中解决以下问题: 1. 远程调用 2. 跨平台调用 3. 跨系统调用 那么WebService在企业中有什么用呢? 1. 同一个公司新旧系统的整合. 2. 不同公司的业务整合: 业务的整合就要带来不同公司的系统整合

2779: 【基础】小 X 与机器人 2 (sihuo)

题目: 时间限制 : 1 Sec 内存限制 : 32 Mb 提交 : 439 解决 : 178 题目描述 小 X 在解决了高大上的落子问题后, 开始着手训练 BetaGo 的深度学习 能力, 第一步要教 BetaGo识别各种各样的棋形,小 X 首先教 BetaGo 识别跟死活密切相关的棋型,在成功识别了一些简单的棋形后, BetaGo 在识别聚四棋形时遇到了困难,所谓聚四棋形就是连在一起的四颗棋子, 它们共有五种不同的形状, 五种棋形及其命名如下图所示: 注意: 每种形状经过旋转.翻折得到的图案

02SpringMvc_springmvc快速入门小案例(XML版本)

这篇文章中,我们要写一个入门案例,去整体了解整个SpringMVC. 先给出整个项目的结构图: 第一步:创建springmvc-day01这么一个web应用 第二步:导入springioc,springweb , springmvc相关的jar包 第三步:在/WEB-INF/下创建web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.

开源项目——小Q聊天机器人V1.4

小Q聊天机器人V1.0 小Q聊天机器人V1.1 小Q聊天机器人V1.2 小Q聊天机器人V1.3 GitHub:https://github.com/baiyuliang/QRobot V1.4版本中,对来聊天界面不同消息布局进行了优化,使得聊天消息类型的扩展性更强!1.4之前的版本我们知道,我是将各种消息类型布局全部集中在了一个xml中,这种方式对少量消息类型的应用还可以,如果消息类型过多,那么这种方式就显得很low了,而且影响性能!1.4版本中,将各种消息类型逐一拆分(并且发送和接收一一对应)

Spring IoC、DI入门小程序

Alt+/智能提示xml配置文件节点及属性:在接口上使用Ctrl+T可以提示其实现类 一.IoC控制反转(将创建对象的权利交给spring)入门小程序 1.引入jar包 2.工程基本结构 3.新建UserService类 package hjp.spring.demo1; import org.junit.Test; public class UserService { public void addUser() { System.out.println("addUser"); } }

linux入门小知识,你在里面总会有发现

一 . grep及egrep的基本介绍: 首先我们要知道grep的这个命令的本身意思即: grep [Global search REgular expression and Print out the line ]  全局搜索正则表达式匹配到的内容,并且打印出匹配内容所在行 grep 是一个很常用但是也很强大的搜索工具,它是以正则表达式为基础,搜索文本文件中符合要求的字符串,并且显示所匹配的字符串所在行. grep搜索的内容是以一行来显示的,当然我们可以使用一些特别的选项来只显示我们所匹配到的