ABC274参加記
4完2ペナ93分 2289位
kokatsuさんのキーエンスプログラミングコンテスト2022(AtCoder Beginner Contest 274)での成績:2289位
— kokatsu (@kokatsu_) October 22, 2022
パフォーマンス:975相当
レーティング:1267→1240 (-27) :(#AtCoder #キーエンスプログラミングコンテスト2022(ABC274) https://t.co/lZV1NNlva1
緑が近くなってきた。。。
A問題
D言語のreal型の精度を信じて提出。
import std;
void main() {
    real A, B;
    readf("%f %f\n", A, B);
    real res = B / A;
    writefln("%.3f", res);
}
B問題
1行ごとにマスを読み込み、箱が置かれている列をカウントする。
import std;
void main() {
    int H, W;
    readf("%d %d\n", H, W);
    auto res = new int[](W);
    foreach (_; 0 .. H) {
        string C;
        readf("%s\n", C);
        foreach (i, c; C) {
            if (c == '#') ++res[i];
        }
    }
    writefln("%(%s %)", res);
}
C問題
番号$2i$と$2i+1$のアメーバは$A_{i}$の世代$+1$になるので、時系列順に処理していく。
import std;
void main() {
    int N;
    readf("%d\n", N);
    auto A = readln.chomp.split.to!(int[]);
    auto res = new int[](N*2+2);
    res[2..$] = -1;
    foreach (i, a; A) {
        res[(i+1)*2] = res[(i+1)*2+1] = res[a] + 1;
    }
    res.popFront;
    foreach (r; res) r.writeln;
}
D問題
正整数列$A$のうち奇数番目が$x$方向の移動、偶数盤面が$y$方向の移動である。 それぞれの方向毎に最終的に到達可能な座標を求め、入力$x$、$y$が到達可能か判断する。
import std;
void main() {
    int N, x, y;
    readf("%d %d %d\n", N, x, y);
    auto A = readln.chomp.split.to!(int[]);
    auto xMove = A[2..$].stride(2), yMove = A[1..$].stride(2);
    bool[int] xList, yList;
    xList[A[0]] = yList[0]= true;
    foreach (xm; xMove) {
        bool[int] nxt;
        foreach (key; xList.keys) {
            nxt[key-xm] = nxt[key+xm] = true;
        }
        xList = nxt;
    }
    foreach (ym; yMove) {
        bool[int] nxt;
        foreach (key; yList.keys) {
            nxt[key-ym] = nxt[key+ym] = true;
        }
        yList = nxt;
    }
    bool isOK = (x in xList) && (y in yList);
    writeln(isOK ? "Yes" : "No");
}