ABC 421
Table of Contents
https://atcoder.jp/contests/abc421
A. Misdelivery
https://atcoder.jp/contests/abc421/tasks/abc421_a
void solve() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int N;
cin >> N;
vector<string> S(N);
rep(i, N) cin >> S[i];
int X;
string Y;
cin >> X >> Y;
X--;
yesno(S[X] == Y);
}
B. Fibonacci Reversed
https://atcoder.jp/contests/abc421/tasks/abc421_b
void solve() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
ll X, Y;
cin >> X >> Y;
auto f = [](ll x) -> ll {
string s = to_string(x);
reverse(all(s));
ll ret = stoll(s);
return ret;
};
vll A(11);
A[1] = X, A[2] = Y;
rep2(i, 3, 11) {
A[i] = f(A[i - 1] + A[i - 2]);
}
cout << A[10] << endl;
}
C. Alternated
https://atcoder.jp/contests/abc421/tasks/abc421_c
void solve() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
ll N;
cin >> N;
string S;
cin >> S;
vint A;
rep(i, N * 2) {
if (S[i] == 'A') A.push_back(i);
}
ll ans = INF;
// ABAB...
{
ll tmp = 0;
for (int i = 0, j = 0; i < N * 2; i += 2, j++) {
tmp += abs(A[j] - i);
}
chmin(ans, tmp);
}
// BABA...
{
ll tmp = 0;
for (int i = 1, j = 0; i < N * 2; i += 2, j++) {
tmp += abs(A[j] - i);
}
chmin(ans, tmp);
}
cout << ans << endl;
}
D. RLE Moving
https://atcoder.jp/contests/abc421/tasks/abc421_d
解説 AC
void solve() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
ll rt, ct, ra, ca;
cin >> rt >> ct >> ra >> ca;
ll N, M, L;
cin >> N >> M >> L;
using P = pair<char, ll>;
deque<P> S, T;
rep(i, M) {
char c;
ll x;
cin >> c >> x;
S.push_back({c, x});
}
rep(i, L) {
char c;
ll x;
cin >> c >> x;
T.push_back({c, x});
}
auto same_pos = [&]() -> bool {
return rt == ra && ct == ca;
};
// rt + x*nrt = ra + x*nra => x = (ra - rt) / (nrt - nra)
// ct + x*nct = ca + x*nca => x = (ca - ct) / (nct - nca)
map<char, pair<ll, ll>> dir;
dir['U'] = {-1, 0};
dir['D'] = {1, 0};
dir['R'] = {0, 1};
dir['L'] = {0, -1};
ll ans = 0;
while (N) {
auto [dt, nt] = S.front();
auto [da, na] = T.front();
ll advance = min(nt, na);
if (dt == da) {
if (same_pos()) {
ans += advance;
}
} else {
auto [nrt, nct] = dir[dt];
auto [nra, nca] = dir[da];
if (nrt - nra == 0) { // 左右
ll x = (ca - ct) / (nct - nca);
if (rt == ra && (ca - ct) % (nct - nca) == 0 && 0 < x && x <= advance) ans++;
} else if (nct - nca == 0) { // 上下
ll x = (ra - rt) / (nrt - nra);
if (ct == ca && (ra - rt) % (nrt - nra) == 0 && 0 < x && x <= advance) ans++;
} else {
ll lx = (ra - rt) / (nrt - nra);
ll rx = (ca - ct) / (nct - nca);
if (lx == rx && (ra - rt) % (nrt - nra) == 0 && (ca - ct) % (nct - nca) == 0 && 0 < lx && lx <= advance) ans++;
}
}
{
auto [nr, nc] = dir[dt];
rt += nr * advance;
ct += nc * advance;
}
{
auto [nr, nc] = dir[da];
ra += nr * advance;
ca += nc * advance;
}
S.front().second -= advance;
T.front().second -= advance;
if (S.front().second == 0) {
S.pop_front();
}
if (T.front().second == 0) {
T.pop_front();
}
N -= advance;
}
cout << ans << endl;
}
E. Yacht
https://atcoder.jp/contests/abc421/tasks/abc421_e
F. Erase between X and Y
https://atcoder.jp/contests/abc421/tasks/abc421_f