マイナビプログラミングコンテスト2021(AtCoder Beginner Contest 201)(Rated範囲外)

コンテスト前のレート:2064
(Ratedだとしたら)レート通りのパフォーマンスが得られる順位:303位(1500点、65分55秒)


※今回は最近のひどさにさらに輪をかけてひどかったので、もう全くまともに書く気ないです。

A - Tiny Arithmetic Sequence

問題

思考過程
  1. ソートしてA_3-A_2=A_2-A_1を満たすかどうか調べる。
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        int[] a = new int[3];
        for (int i = 0; i < a.length; i++) {
            a[i] = sc.nextInt();
        }
        sc.close();

        Arrays.sort(a);
        if (a[2] - a[1] == a[1] - a[0]) {
            System.out.println("Yes");
        } else {
            System.out.println("No");
        }
    }
}

ここまで1分09秒+0ペナ。285位。


B - Do you know the second highest mountain?

問題

思考過程
  1. ペアソートして2番目を出力する。
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        Obj[] arr = new Obj[n];
        for (int i = 0; i < n; i++) {
            Obj o = new Obj();
            o.s = sc.next();
            o.t = sc.nextInt();
            arr[i] = o;
        }
        sc.close();

        Arrays.sort(arr, (o1, o2) -> o2.t - o1.t);
        System.out.println(arr[1].s);
    }

    static class Obj {
        String s;
        int t;
    }
}

ここまで2分41秒+0ペナ。191位。


C - Secret Number

問題

思考過程
  1. "0000"~"9999"が条件を満たすか全部試す。
  2. 条件を満たすかの判定は、0から9まで、indexOfで含まれているかどうか調べる。
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        char[] s = sc.next().toCharArray();
        sc.close();

        int ans = 0;
        for (int i = 0; i < 10000; i++) {
            String t = String.valueOf(i);
            while (t.length() < 4) {
                t = "0" + t;
            }
            boolean flg = true;
            for (int j = 0; j < 10; j++) {
                if (s[j] == 'o') {
                    // jが含まれていない場合NG
                    if (t.indexOf(String.valueOf(j)) == -1) {
                        flg = false;
                        break;
                    }
                } else if (s[j] == 'x') {
                    // jが含まれている場合NG
                    if (t.indexOf(String.valueOf(j)) != -1) {
                        flg = false;
                        break;
                    }
                }
            }
            if (flg) {
                ans++;
            }
        }
        System.out.println(ans);
    }
}

ここまで10分06秒+0ペナ。365位。



D問題は40分ほどかけて解けず。
DPということまでは一瞬で見当が付き、後ろからやることも考えたが、おかしな遷移しか書けていなかった。


残りの40~50分はほぼE問題に費やし、残り5分で例2が合って、残り3分でmodの取り漏れを直して例3が合って提出できたが、1ケースだけTLE(3200ms台)。
残り3分でぱっと思い付く小細工で定数倍改善を試みるが通らず。むしろ遅くなっていた。
解法は、DFS(木DP)で葉から各桁ごとに0の個数と1の個数を保持して根まで戻っていく感じ。


F問題はほぼ問題文を読んだだけで、各人ごとに0, A_i, B_i, C_iのいずれかを選ぶことになりそうくらいまではわかったが、どれが最適なのかは全然わかりそうになかったのですぐE問題に戻った。



終結果:ABCの3完、10分06秒、1552位、パフォーマンス1256相当
レート変動:2064(Unrated)


もうUnratedのABCはくじかつだと思って、ARCやAGCがまともにできればいいやという感じ。
2月末頃のタイミングで黄色になってABCから逃げられてなかったら、今頃1800台くらいまでは落ちてるんじゃないだろうか・・・。