zoukankan      html  css  js  c++  java
  • 蓝桥杯2015初赛

    题目链接

    http://oj.ecustacm.cn/problem.php?id=1261

    思路

    我本来是想用Dijkstra写的,发现建图的时候没有办法建出来。

    看了题解勉强懂了。

    1. 首先判断给出的两个数所在行列(也就是其坐标);

    2. 之后再判断他们的奇偶性。如果是奇数说明那一列的数据是倒序(倒着)输入的,翻转一下就行;

    3. 需要注意的是,以下代码是建立建图下标从0开始的,而不是1。

    AC代码

    #include<iostream>
    #include<stdio.h>
    #include<cmath>
    #include<algorithm>
    #include<queue>
    #include<map>
    #include<stack>
    #include<vector>
    using namespace std;
    #define inf 0x3f3f3f3f
    
    int main()
    {
    	int w, w1, w2;
    	while (cin >> w >> w1 >> w2)
    	{
    		//cout << (3 & 1) << endl; // 奇数1
    		//cout << (2 & 1) << endl; // 偶数0
    		int x1 = (w1 - 1) / w, x2 = (w2 - 1) / w; // 计算w1和w2所在的行
    		// -1 是因为下标都从0开始
    		int y1 = (w1 - 1) % w, y2 = (w2 - 1) % w; // 计算w1和w2所在的列
    		if (x1 & 1) y1 = w - 1 - y1; // 判断是否是奇数
    		if (x2 & 1) y2 = w - 1 - y2; // 判断是否是奇数
    		//w-1是因为下标从0开始,判断是奇数的话说明那一列的数是倒序,需要反转
    		int ans = abs(x1 - x2) + abs(y1 - y2); // 输出曼哈顿距离
    		printf("%d
    ", ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    ExecuteScalar 返回值问题
    c#中怎么用for循环遍历DataTable中的数据
    select多用户之间通信
    python快速学习6
    python快速学习5
    python快速学习4
    python快速学习3
    python快速学习2
    arm处理器
    软链接与硬链接
  • 原文地址:https://www.cnblogs.com/OFSHK/p/13804086.html
Copyright © 2011-2022 走看看