Codeforces Round #722 (Div. 2)
A - Eshag Loves Big Arrays
int main() {
IOS;
for (cin >> _; _; --_) {
cin >> n; map<int, int> st;
rep (i, 1, n) cin >> m, ++st[m];
cout << n - st.begin()->second << '
';
}
return 0;
}
B - Sifid and Strange Subsequences
int main() {
IOS;
for (cin >> _; _; --_) {
cin >> n;
rep (i, 1, n) cin >> a[i];
sort(a + 1, a + 1 + n);
int cnt = upper_bound(a + 1, a + 1 + n, 0) - a - 1;
int cnt0 = cnt - (upper_bound(a + 1, a + 1 + n, -1) - a - 1);
m = 2e9;
rep (i, 1, cnt - cnt0) umin(m, a[i + 1] - a[i]);
k = a[upper_bound(a + 1, a + 1 + n, m) - a - 1];
cout << max(cnt, cnt - cnt0 + (cnt0 != 0) + (k > 0 && k <= m)) << '
';
}
return 0;
}
C - Parsa's Humongous Tree
取中间是使得绝对值差最小, 显然取两端使得绝对值差最大
每个点要么选(l), 要么选(r), 典型的树形dp
int l[N], r[N];
ll f[N][2];
VI h[N];
void dfs(int x, int fa) {
for (auto &y : h[x]) if (y ^ fa) {
dfs(y, x);
f[x][0] += max(f[y][0] + abs(l[x] - l[y]), f[y][1] + abs(l[x] - r[y]));
f[x][1] += max(f[y][0] + abs(r[x] - l[y]), f[y][1] + abs(r[x] - r[y]));
}
}
int main() {
IOS;
for (cin >> _; _; --_) {
cin >> n;
rep (i, 1, n) cin >> l[i] >> r[i], clear(h[i]), f[i][0] = f[i][1] = 0;
rep (i, 2, n) {
int u, v; cin >> u >> v;
h[u].pb(v); h[v].pb(u);
}
dfs(1, 0);
cout << max(f[1][0], f[1][1]) << '
';
}
return 0;
}
D - Kavi on Pairing Duty
对于不交叉, 也不包含的, 就是找(n)的因子个数即可,
否则链接(1, n), 相当于少了(2)个点, 也就变成了(n - 1)
dp完事
ll f[N], s;
int main() {
IOS; cin >> n;
rep (i, 1, n) for (int j = i; j <= n; j += i) ++f[j];
rep (i, 1, n) {
f[i] = (f[i] + s) % mod;
s = (s + f[i]) % mod;
}
cout << f[n];
return 0;
}