专栏文章

题解:CF478B Random Teams

CF478B题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqqwpif
此快照首次捕获于
2025/12/04 09:16
3 个月前
此快照最后确认于
2025/12/04 09:16
3 个月前
查看原文
我们先来看最小值。
有点类似于找次品一类问题的思想,让每一组人数尽可能平均,可以得到最小值。
然后再来看最大值。
手推几组数据可以发现,当某一组人数越多时答案会越大。所以我们可以把前 m1m-1 组的人数都设为 ll ,最后一组的人数设为 nm+1n-m+1 ,这样可以得到最大值。

AC Code

CPP
#include <bits/stdc++.h>
using namespace std;
long long n, m;
long long f(long long x) {
	return x * (x - 1) / 2;
}
int main() {
	cin >> n >> m;
	if (n < m) {
		cout << 0 << " " << 0 << endl;
		return 0;
	}
	long long k = n % m;
	cout << k * f(n / m + 1) + (m - k) * f(n / m) << " " << f(n - m + 1) << endl;
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...