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;
}

浙公网安备 33010602011771号