题目链接:http://codeforces.com/problemset/problem/370/A

题目意思:根据rook(每次可以移动垂直或水平的任意步数(>=1)),bishop(每次可以移动对角线上的任意步数(>=1))和king(每次垂直、水平或对角线的一步(=1))的走法,给出起始位置和结束位置。求出这三种棋子分别从起始位置走到最终位置的最少步数。

rook           bishop          king

  

  首先,先解释下面所说的直线和斜线。

  直线:是坐标轴上与x轴平行或与y轴平行的情况的直线。

斜线:图中bishop能走的斜线(能走到坐标点的格子),不是一般的那种斜线(可能走的过程中走不到整数的格子的)

rook是最容易的,如果起始位置和最终位置在同一直线,那么只需要一步即可,否则是两步。

比较麻烦的是bishop,一开始很天真地以为,如果不是斜线的那种情况,bishop就无法到达最终位置。其实处于同一直线也是可以的。如果是(3,1)到(5,1),可以通过(4,2)这个桥梁,到达终点。还有,一般斜线的情况,例如(3,1)到(4,6),可以经过(6,4)。

还是以(3,1)到(4,6)这个例子来说明我的解决办法

考虑到棋盘的特殊性,分别以起点和终点画一条斜线(假设对应为k1和k2),两条斜线必须满足斜率是不同的,满足k1 * k2 = -1),求出两条斜线的交点,判断是否为整数。(注意,即使这个交点超出棋盘范围之外也没有所谓,因为它可以通过另外一个对称点(以黄色标记)来到达目的地)。可能大家会觉得求出交点很麻烦,但是其实也不是很难。由于已经知道斜线上的斜率和交点,那么方程就确定了)

K1 = -1, 方程为: y = -x + 4 (y1 = k1*x1 + b1)

   K2 = 1,   方程为: y = x + 2   (y2 = k2*x2 + b2)

联立方程 y = (4 + 2)/ 2 = 2

求出的y是整数,说明交点在格子上,其实得出的交点是什么不重要,关键是判断是否为整数,是则bishop的步数为2,否则不可达,为0。抽象出来,b1 = x1 + y1,b2 = y2 - x2,交点y = (b1+b2)/2。

至此,bishop解决了,还有最后的king,这里不详细说明,不过本人觉得也是要考虑清楚的。

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath> int main()
{
int r1, c1, r2, c2, t1, t2, flag1, flag2;
while (scanf("%d%d%d%d", &r1, &c1, &r2, &c2) != EOF)
{
// rook
flag2 = ;
if ((r1 == r2 && c1 != c2) || (c1 == c2 && r1 != r2))
{
flag2 = ;
printf("1 ");
}
else
printf("2 ");
// bishop
flag1 = ;
if (abs(r1-r2) == abs(c1-c2))
{
printf("1 ");
flag1 = ;
}
else
{
t1 = r1 + c1;
if (r2 > c2)
t2 = r2 - c2;
else
t2 = c2 - r2;
if ((t1 + t2) % == )
printf("2 ");
else
printf("0 ");
}
// king
if (flag2) //一条直线
printf("%d\n", abs(r1-r2) + abs(c1-c2));
else if (flag1) //一条斜线
printf("%d\n", abs(r1-r2));
else if (abs(r1-r2) < abs(c1-c2))
printf("%d\n", abs(c1-c2));
else
printf("%d\n", abs(r1-r2));
}
return ;
}

codeforces A. Rook, Bishop and King 解题报告的更多相关文章

  1. CodeForces 370A Rook, Bishop and King

    此题看似很简单,但实际上有不少细节,WA点不少.分情况处理即可. #include<cmath> #include<cstdio> #include<string> ...

  2. CF Rook, Bishop and King

    http://codeforces.com/contest/370/problem/A 题意:车是走直线的,可以走任意多个格子,象是走对角线的,也可以走任意多个格子,而国王可以走直线也可以走对角线,但 ...

  3. codeforces C1. The Great Julya Calendar 解题报告

    题目链接:http://codeforces.com/problemset/problem/331/C1 这是第一次参加codeforces比赛(ABBYY Cup 3.0 - Finals (onl ...

  4. codeforces B. Eugeny and Play List 解题报告

    题目链接:http://codeforces.com/problemset/problem/302/B 题目意思:给出两个整数n和m,接下来n行给出n首歌分别的奏唱时间和听的次数,紧跟着给出m个时刻, ...

  5. codeforces 433C. Ryouko's Memory Note 解题报告

    题目链接:http://codeforces.com/problemset/problem/433/C 题目意思:一本书有 n 页,每页的编号依次从 1 到 n 编排.如果从页 x 翻到页 y,那么| ...

  6. [POJ2728] Desert King 解题报告(最优比率生成树)

    题目描述: David the Great has just become the king of a desert country. To win the respect of his people ...

  7. Codeforce 370A Rook, Bishop and King 数学规律

    这个题目挺有意思的,给定 起终点,要你求车,象,王分别最少要走多少步 车横竖都能走,而且每步任意走几格,所以它是最容易处理的,如果在同行或者同列,就是1,否则就是2 象要找下规律,象任意对角线都能走, ...

  8. 【LeetCode】1222. Queens That Can Attack the King 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 遍历 日期 题目地址:https://leetcode ...

  9. codeforces 556B. Case of Fake Numbers 解题报告

    题目链接:http://codeforces.com/problemset/problem/556/B 题目意思:给出 n 个齿轮,每个齿轮有 n 个 teeth,逆时针排列,编号为0 ~ n-1.每 ...

随机推荐

  1. Xcode 6以上版本如何创建一个空的工程(Empty Application)

    Xcode 6 正式版里面没有Empty Application这个模板,这对于习惯了纯代码编写UI界面的程序员来说很不习惯. 有高手给出了一个解决方法是,把Xcode 6 beta版里面的模板复制过 ...

  2. Python之MySQL

    本文我们为大家介绍 Python3 使用 PyMySQL 连接数据库,并实现简单的增删改查. 什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一 ...

  3. C#实现通过程序自动抓取远程Web网页信息的代码

    http://www.jb51.net/article/9499.htm 通过程序自动的读取其它网站网页显示的信息,类似于爬虫程序.比方说我们有一个系统,要提取BaiDu网站上歌曲搜索排名.分析系统在 ...

  4. 关于Asp.Net Mvc3.0 使用KindEditor4.0 上传图片与文件

    http://blog.csdn.net/fyxq14hao/article/details/7245502 今天我们的Asp.Net Mvc 3的项目中,把KindEditor3.9改为 KindE ...

  5. Aop 是面向切面编程,

    Aop 是面向切面编程,是在业务代码中可以织入其他公共代码(性能监控等),现在用普通的方法实现AOP http://blog.csdn.net/heyanfeng22/article/details/ ...

  6. javascript面向对象方式,调用属性和方法

    1.定义一个Person类,其中的属性和方法如果想对外开放,需要使用this,如: var Person=function(name,age,sex){ var psex='Boy'; if(sex) ...

  7. Dedecms v5.7 最新注入分析

    该漏洞是cyg07在乌云提交的, 漏洞文件: plus\feedback.php.存在问题的代码: view source 01 ... 02 if($comtype == 'comments') 0 ...

  8. 转:浅谈Radius协议 -来自CSDN:http://blog.csdn.net/wangpengqi/article/details/17097221

    浅谈Radius协议 2013-12-03 16:06 5791人阅读 评论(0) 收藏 举报  分类: Radius协议分析(6)  从事Radius协议开发有段时间了,小弟不怕才疏学浅,卖弄一下, ...

  9. ThinkPHP邮件发送函数示例

    ThinkPHP邮件发送函数示例详解 /** * 发送邮件 * @param $tomail * @param $subject * @param $body * @param string $con ...

  10. DOM: 如何获取元素下的第一个子元素

    Element.firstChild ?,是的,这是第一种方法,当然,通常来说支持 W3C 规范的浏览器,如 Firefox 等取到的应该是 TEXT_NODE.很早之前,或者说现在最流行的方法可能是 ...