AtCoder Beginners selection 終わりました
AtCoder Beginners Selection 問題集が終わったので、最後の問題(ABC086C - Traveling)をどのように解決したかの記録を残そうと思います。
問題
ABC086C - Traveling問題文
https://atcoder.jp/contests/abs/tasks/arc089_a制約
- 一単位時間ごとにX又はYを+1 or -1 できる。
- 同じ場所にとどまることが出来ない
解決方針
- 現在の位置から目的地まで移動する距離(X方向, Y方向)を算出する。
- (移動距離 - 時間) >= 0 か確認する。
- 2.が真ならば残り時間(移動距離 - 時間)を2で割った余りが0か確認する。
(残り時間が奇数だった場合、目的地から動くと戻れないため) - 2. 3.が真なら"Yes"を返し、そうでないなら"No"を返す。
実際のコード
import java.util.Arrays; import java.util.Scanner; public class Main { static String T = ""; public static void main(String args[]) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int currentX = 0; int currentY = 0; int currentTime = 0; boolean boo = true; // 途中までいると思ってたけど要らない子でした for(int i = 0; i < n; i++){ int t = sc.nextInt(); int x = sc.nextInt(); int y = sc.nextInt(); int distanceX = Math.abs(x - currentX); int distanceY = Math.abs(y - currentY); int restTime = t - currentTime; if((distanceX + distanceY) - restTime > 0){ System.out.println("No"); return; }else if ((distanceX + distanceY - restTime) % 2 == 0){ }else{ System.out.println("No"); return; } } System.out.println("Yes"); } }
感想
伝説のMLE問題と比べると簡単だったイメージこの問題も他の解き方があると思うので知識を増やす意味を込めて見ておきます(なおJava以外あまりわからない)
次回からはAtCoderのBeginner Contestから問題を引っ張ってきてやろうと思います。
それではバイバイ