ABC 338
Table of Contents
A. Capitalized?
https://atcoder.jp/contests/abc338/tasks/abc338_a
B. Frequency
https://atcoder.jp/contests/abc338/tasks/abc338_b
C. Leftover Recipes
https://atcoder.jp/contests/abc338/tasks/abc338_c
D. Island Tour
https://atcoder.jp/contests/abc338/tasks/abc338_d
解説 AC
void solve() {
ll n, m;
cin >> n >> m;
vll x(m);
rep(i, m) {
cin >> x[i];
x[i]--;
}
vll cumsum(n * 2 + 1, 0);
rep(i, m - 1) {
ll mi = min(x[i], x[i + 1]);
ll mx = max(x[i], x[i + 1]);
ll dr = mx - mi;
ll dl = n - dr;
cumsum[mi] += dl;
cumsum[mx] -= dl;
cumsum[0] += dr;
cumsum[mi] -= dr;
cumsum[mx] += dr;
cumsum[n] -= dr;
}
rep(i, n * 2) cumsum[i + 1] += cumsum[i];
ll ans = INF;
rep(i, n) chmin(ans, cumsum[i]);
cout << ans << endl;
}
E. Chords
https://atcoder.jp/contests/abc338/tasks/abc338_e
https://atcoder.jp/contests/abc405/editorial/13011 での方式と同じ実装して通った。
void solve() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int N;
cin >> N;
vector<pair<int, int>> ps;
rep(i, N) {
int a, b;
cin >> a >> b;
a--, b--;
if (a > b)
swap(a, b);
ps.emplace_back(a, b);
}
sort(all(ps), [](auto a, auto b) -> bool {
return a.second < b.second;
});
auto op = [](ll a, ll b) -> ll { return a + b; };
auto e = []() -> ll { return 0ll; };
segtree<ll, op, e> seg(N * 2);
rep(i, N) {
seg.set(ps[i].first, 1);
}
bool ans = false;
for (auto [a, b] : ps) {
int sum = seg.prod(a + 1, b);
if (sum > 0)
ans = true;
seg.set(a, -1);
seg.set(b, 1);
}
yesno(ans);
}
F. Negative Traveling Salesman
https://atcoder.jp/contests/abc338/tasks/abc338_f