题目链接: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. iOS8跳到系统设置页面

    iOS5.1+之后跳转setting页面的方式都失效了,不过在iOS8苹果有提供了一个键值允许app跳转到setting页面,具体代码如下: NSURL *url = [NSURL URLWithSt ...

  2. 打印cell的视图层次结构

    #ifdef DEBUG NSLog(@"Cell recursive description:\n\n%@\n\n", [cell performSelector:@select ...

  3. 抓包利器Fiddler

    1).Fiddler安装 a.下载地址: http://fiddler2.com/get-fiddler b.安装:省略(下一步...下一步即可) 2).Fiddler配置 a.允许远程计算机连接Fi ...

  4. a[1000][1000]程序崩溃

    1000 * 1000是大于65536的.如果不是需求需要,没必要开辟如此之多的空间.因为这些空间实在栈上申请的(如果是局部变量),栈的空间是有限的并且是宝贵的,所以呢,开辟太多的空间而不适用很可能会 ...

  5. ajax入门详解

    l 一个实例 在开始正式讲解 Ajax之前,首先让我们先来看看Google Map使用Ajax改善其产品设计的效果. 1. 在浏览器地址栏中输入http://maps.google.com打开Goog ...

  6. 使用SubLineText3

    一 Sublinetext3 1. Sublime Text3是一款跨平台的编辑器, 2. 安装网址: http://www.sublimetext.com/3 二 常用使用方法 1)打开控制台: V ...

  7. 修改了n次效率还是不可接受

  8. win2008r2激活码

    我这有三个 以前用过可以 现在不知道能不能用 你试试BBFP3-49FVF-TJB8F-V26V6-DJPX9 CXTFT-74V4Y-9D48T-2DMFW-TX7CYGYF3T-H2V88-GRP ...

  9. SQL注入原理小结

    今天,一基友问我一个问题说:为什么SQL注入要加单引号,这个当时我一时也回答不上,怪就怪自己理论太菜,不过回去仔细思考了一下,觉得这个问题也是蛮简单的. 首先大家应该明白的一点就是SQL注入的目的:加 ...

  10. Spring入门_01

    <bean id="userAction" class="com.umgsai.spring.UserAction"> <property n ...