← 全部文章

Codeforces Round #621 (Div. 1 + Div. 2) 题解

本文目录(7 节)
  1. Cow and Haybales
  2. Cow and Friend
  3. Cow and Message
  4. Cow and Fields
  5. Cow and Treats
  6. Cow and Vacation
  7. Cow and Exercise

Codeforces Round #621 (Div. 1 + Div. 2)

Cow and Haybales

贪心。

const int N = 107;
int n, d, a[N];

inline void solve() {
	rd(n), rd(d);
	for (int i = 1; i <= n; i++) rd(a[i]);
	for (int i = 2; i <= n; i++) {
		int now = min(d, a[i] * (i - 1));
		a[1] += now / (i - 1), d -= now;
	}
	print(a[1]);
}

int main() {
	int T;
	rd(T);
	while (T--) solve();
	return 0;
}

Cow and Friend

贪心。

const int N = 1e5 + 7;
int n, d, a[N], x;

inline void solve() {
	rd(n), rd(d);
	for (int i = 1; i <= n; i++) rd(a[i]);
	sort(a + 1, a + n + 1);
	x = upper_bound(a + 1, a + n + 1, d) - a - 1;
	if (!x) print(2);
	else if (x == n) print((d - 1) / a[x] + 1);
	else print(min(2, (d - 1) / a[x] + 1));
}

int main() {
	int T;
	rd(T);
	while (T--) solve();
	return 0;
}

Cow and Message

前缀和,组合计数。

const int N = 1e5 + 7;
int n, c[26];
char s[N];
ll ans, f[26][26];

int main() {
	rds(s, n);
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j < 26; j++)
			f[j][s[i]-'a'] += c[j];
		++c[s[i]-'a'];
	}
	ans = *max_element(c, c + 26);
	for (int j = 0; j < 26; j++)
		for (int k = 0; k < 26; k++)
			ans = max(ans, f[j][k]);
	print(ans);
	return 0;
}

Cow and Fields

求出每个点与 11 到 nn 的最短路,一条新的路只可能从离 nn 更远的点连向离 nn 更近的点,贪心即可。

const int N = 2e5 + 7, inf = 1e9;
int n, m, k, a[N], ds[N], dt[N], v[N], ans;
vi e[N];

inline void dij(int s, int *d) {
	for (int i = 1; i <= n; i++) d[i] = inf, v[i] = 0;
	pq<pi> q;
	d[s] = 0, q.push(mp(0, s));
	while (q.size()) {
		int x = q.top().se;
		q.pop();
		if (v[x]) continue;
		v[x] = 1;
		for (int y : e[x])
			if (d[y] > d[x] + 1)
				d[y] = d[x] + 1, q.push(mp(-d[y], y));
	}
}

int main() {
	rd(n), rd(m), rd(k);
	for (int i = 1; i <= k; i++) rd(a[i]);
	for (int i = 1, x, y; i <= m; i++) rd(x), rd(y), e[x].pb(y), e[y].pb(x);
	dij(1, ds), dij(n, dt);
	sort(a + 1, a + k + 1, [&](int i, int j) { return dt[i] < dt[j]; });
	for (int i = 1; i < k; i++)
		ans = max(ans, ds[a[i+1]] + 1 + dt[a[i]]);
	print(min(ans, ds[n]));
	return 0;
}

Cow and Treats

垃圾题。

Cow and Vacation

题目太神仙了,先咕咕咕着。

Cow and Exercise

题目太神仙了,先咕咕咕着。

标签:前缀和/差分、最短路、组合计数、贪心

评论

    填写昵称即可留言。评论经站主审核后公开,请勿提交私人信息。

    正在连接评论服务…