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");
}