Hopscotch - 题解

一道还算行的模拟题。

分析:
在最前面先判断会不会输出-1,并且进行简单的判断。

下面有三种情况:

  • 横坐标(\(x\))上的值 \(a\mod{2}=0\)

  • 纵坐标 \(y = 0\)

  • 不在正方体上。

这三种都是简单的判断,不再多言。

下面重点说横纵坐标在哪一个正方形。

原图:

第一步:寻找在第几行

第二步:判断当前行的奇偶性(\(size\mod{s} = 0\)\(size \mod{2} = 1\))。

第三步:然后找出此行的最后一位。

第四步:如果 \(size\mod{2} = 1\),看坐标在左还是在右。



code


#include <bits/stdc++.h>
using namespace std;
#define ll long long;

int main()
{

    int a, x, y;
    cin >> a >> x >> y;

    if (y == 0 || abs(x) >= a || y % a == 0)
    {
        cout << -1;
        return 0;
    }

    int level = (y / a) + 1;
    int ans;
    if (level == 1)
    {
        if (abs(x) >= (a + 1) / 2)
        {
            ans = -1;
            cout << ans;
            return 0;
        }
        else
        {
            ans = 1;
        }
        cout << ans;
        return 0;
    }

    else if (level % 2 == 1)
    {

        int odd_levels = level / 2;
        int ans = odd_levels * 2 + (odd_levels - 1) + 2;
        if (x < 0)
        {
            --ans;
        }
        if (x == 0)
        {
            ans = -1;
            cout << ans;
            return 0;
        }
        cout << ans;
        return 0;
    }
    else
    {
        int odd_levels = (level - 1) / 2;
        ans = odd_levels * 2 + (odd_levels + 1) + 1;
        if (abs(x) >= (a + 1) / 2)
        {
            ans = -1;
            cout << ans;
            return 0;
        }
        cout << ans;
        return 0;
    }

    return 0;
}


posted @ 2023-10-04 08:54  _Unnamed  阅读(17)  评论(0)    收藏  举报