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問題
Ai−Aj=Xを式変形するとAi=X+Ajとなる。 Ai(1≤i≤N)を連想配列で管理し、連想配列内にX+Aj(1≤j≤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≤i≤106)に対して、Mをiで割った切り上げをdとする。 iとdが1以上N以下であれば、X=min(X,i×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;
}