回答編集履歴
5
コードの変更
answer
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
```C
|
15
15
|
int travel(int t_old, int x_old, int y_old, int t, int x, int y)
|
16
16
|
{
|
17
|
-
int
|
17
|
+
int d = (t - t_old) - (abs(x - x_old) + abs(y - y_old));
|
18
|
-
return
|
18
|
+
return d < 0 ? 1 : d & 1;
|
19
19
|
}
|
20
20
|
```
|
4
追記
answer
CHANGED
@@ -6,4 +6,15 @@
|
|
6
6
|
次の入力を考えてみてください。
|
7
7
|
2
|
8
8
|
4 2 2
|
9
|
-
5 0 3
|
9
|
+
5 0 3
|
10
|
+
|
11
|
+
**追記**
|
12
|
+
いつのまにか解決済みになっていますが、どうやって解決したのかが書かれていません。
|
13
|
+
こんなやり方もあります。
|
14
|
+
```C
|
15
|
+
int travel(int t_old, int x_old, int y_old, int t, int x, int y)
|
16
|
+
{
|
17
|
+
int dt = t - t_old, dist = abs(x - x_old) + abs(y - y_old);
|
18
|
+
return (dt < dist) ? 1 : (dt + dist) & 1;
|
19
|
+
}
|
20
|
+
```
|
3
説明の修正
answer
CHANGED
@@ -1,3 +1,9 @@
|
|
1
1
|
`if((x-x_old+y-y_old)%2==1){` ですが、
|
2
2
|
`(x-x_old+y-y_old)` が負の奇数の場合、2 で割った余りは 1 になりません。
|
3
|
-
`==1` を `!=0` にしてみてください。
|
3
|
+
`==1` を `!=0` にしてみてください。
|
4
|
+
|
5
|
+
それから、`if(abs(x-x_old+y-y_old)<=t-t_old)` という判定も間違っています。
|
6
|
+
次の入力を考えてみてください。
|
7
|
+
2
|
8
|
+
4 2 2
|
9
|
+
5 0 3
|
2
間違った説明の削除
answer
CHANGED
@@ -1,9 +1,3 @@
|
|
1
1
|
`if((x-x_old+y-y_old)%2==1){` ですが、
|
2
2
|
`(x-x_old+y-y_old)` が負の奇数の場合、2 で割った余りは 1 になりません。
|
3
|
-
`==1` を `!=0` にしてみてください。
|
3
|
+
`==1` を `!=0` にしてみてください。
|
4
|
-
|
5
|
-
それから、`if(abs(x-x_old+y-y_old)<=t-t_old)` という判定も間違っています。
|
6
|
-
次の入力を考えてみてください。
|
7
|
-
2
|
8
|
-
4 2 2
|
9
|
-
6 0 4
|
1
説明の追加
answer
CHANGED
@@ -1,3 +1,9 @@
|
|
1
1
|
`if((x-x_old+y-y_old)%2==1){` ですが、
|
2
2
|
`(x-x_old+y-y_old)` が負の奇数の場合、2 で割った余りは 1 になりません。
|
3
|
-
`==1` を `!=0` にしてみてください。
|
3
|
+
`==1` を `!=0` にしてみてください。
|
4
|
+
|
5
|
+
それから、`if(abs(x-x_old+y-y_old)<=t-t_old)` という判定も間違っています。
|
6
|
+
次の入力を考えてみてください。
|
7
|
+
2
|
8
|
+
4 2 2
|
9
|
+
6 0 4
|