ABC296参加記
4完3ペナ45分 1612位
kokatsuさんのAtCoder Beginner Contest 296での成績:1612位
— kokatsu (@kokatsu_) April 1, 2023
パフォーマンス:1192相当
レーティング:1273→1266 (-7) :(#AtCoder #ABC296 https://t.co/WvlgOdvtf0
水パフォ乗らなかったか。。。
A問題
group関数を用いて、男女が交互に並んでいるか判定する。
import std;
void main() {
int N;
readf("%d\n", N);
auto S = readln.chomp.to!(dchar[]);
auto G = S.group.array;
writeln(G.length == N ? "Yes" : "No");
}
B問題
2重ループを用いて*
を探索し、その位置を名前に変換する。
import std;
void main() {
string res;
foreach (i; 0 .. 8) {
string S;
readf("%s\n", S);
foreach (j, s; S) {
if (s == '*') {
res = to!dchar('a'+j).to!string ~ to!string(8-i);
}
}
}
res.writeln;
}
C問題
$A_{i} - A_{j} = X$を式変形すると$A_{i} = X + A_{j}$となる。 $A_{i}(1 \leq i \leq N)$を連想配列で管理し、連想配列内に$X + A_{j}(1 \leq j \leq N)$となる値があるか判定する。
import std;
void main() {
int N, X;
readf("%d %d\n", N, X);
auto A = readln.chomp.split.to!(int[]);
bool[int] list;
foreach (a; A) {
list[a] = true;
}
bool isOK;
foreach (a; A) {
if (X + a in list) {
isOK = true;
}
}
writeln(isOK ? "Yes" : "No");
}
D問題
$i(1 \leq i \leq 10^{6})$に対して、$M$を$i$で割った切り上げを$d$とする。 $i$と$d$が1以上$N$以下であれば、$X = min(X, i \times d)$で答えを求める。
import std;
enum long S = 2 * 10 ^^ 6;
void main() {
long N, M;
readf("%d %d\n", N, M);
long res = -1;
foreach (i; 1 .. S+1) {
if (i > N) break;
long d = (M + i - 1) / i;
long m = i * d;
if (1 <= d && d <= N) {
if (res == -1) res = m;
else res = min(res, m);
}
}
res.writeln;
}