teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

コードの変更

2021/09/29 10:18

投稿

kazuma-s
kazuma-s

スコア8222

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 dt = t - t_old, dist = abs(x - x_old) + abs(y - y_old);
17
+ int d = (t - t_old) - (abs(x - x_old) + abs(y - y_old));
18
- return (dt < dist) ? 1 : (dt + dist) & 1;
18
+ return d < 0 ? 1 : d & 1;
19
19
  }
20
20
  ```

4

追記

2021/09/29 10:18

投稿

kazuma-s
kazuma-s

スコア8222

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

説明の修正

2021/09/29 10:13

投稿

kazuma-s
kazuma-s

スコア8222

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

間違った説明の削除

2021/09/23 15:04

投稿

kazuma-s
kazuma-s

スコア8222

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

説明の追加

2021/09/23 14:59

投稿

kazuma-s
kazuma-s

スコア8222

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