残缺的棋盘 数学
2016-04-30 18:40
218 查看
题目:
题目 I. 残缺的棋盘在国际象棋里,王是最重要的一个棋子。每一步,王可以往上下左右或者对角线方向移动一 步,如下图所示。
给定两个格子 A(r1,c1), B(r2,c2),你的任务是计算出一个王从 A到 B至少需要走多少步。为了 避免题目太简单,我们从棋盘里拿掉了一个格子 C(r3,c3)(ABC保证互不相同),要求王从 A 走到 B的过程中不能进入格子 C。在本题中,各行从上到下编号为 1~8,各列从左到右编号为 1~8。
输入格式 输入包含不超过 10000 组数据。每组数据包含 6个整数 r1, c1, r2, c2, r3, c3 (1<=r1, c1, r2, c2, r3, c3<=8). 三个格子 A, B, C保证各不相同。
输出格式 对于每组数据,输出测试点编号和最少步数。
样例输入
1 1 8 7 5 6
1 1 3 3 2 2
样例输出
Case 1: 7
Case 2: 3
题目大意:
给三个坐标,求不经过c坐标从a走到b最少几步
题目思路:
1、题目的现金个数为1,不需要用bfs搜索
2、用向量判去判断特殊情况
3、如果是就在距离上加1
程序:
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #include <queue> #include <map> #include <cmath> #include <string> #define INF 0x3f3f3f3f using namespace std; int main() { int r1,c1,r2,c2,r3,c3,ci=1; while(~scanf("%d%d%d%d%d%d",&r1,&c1,&r2,&c2,&r3,&c3)) { int ans=max(abs(r2-r1),abs(c2-c1)); int x1=r3-r1; int x2=r2-r1; int y1=c3-c1; int y2=c2-c1; if(x1*y2-x2*y1==0)//直线 { if(abs(x2)==abs(y2))// if(x1*x1+y1*y1<x2*x2+y2*y2) if(x1*x2>=0&&y1*y2>=0) ans+=1; } printf("Case %d: %d\n",ci++,ans); } return 0; }
相关文章推荐
- Codeforces Round #349 (Div. 1)
- 如何解决 arm-none-linux-gnueabi-gcc -v和arm-linux-gcc 没有那个文件或目录
- Hadoop RPC基本框架
- BZOJ4379: [POI2015]Modernizacja autostrady
- char、wchar_t、strlen、wcslen
- div的层的覆盖
- App架构设计经验谈:接口的设计
- 山东省第三届ACM大学生程序设计竞赛-Pixel density(模拟)
- C# 文件重命名
- 为什么Enable BitCode(Xcode7)真机测试要修改为 NO
- 亿级 Web 系统的容错性建设实践
- PySide学习笔记第九章-对话框
- 实现带子菜单的选项菜单(学习笔记)
- C++ 左值引用和右值引用(C++11特性)
- POJ - 2387 Til the Cows Come Home(Dijkstra)
- WKWebView与JS交互之实战技巧介绍
- 杭州4--30,关于css,bootstrap,url渲染的js语句问题
- JSP+Servlet+JSTL简单介绍
- java基础:在子类的构造函数中为什么必须调用父类的构造函数(与转型)
- 杨辉三角