I. Board Game
Solution
考虑一组个人实际上可以看成和两组,枚举分出多少组,剩余的人就平均分到组中。
本题实际上定位应该是签到,但是数据有问题。
时间复杂度。
题目数据有问题,下面代码中注释掉的if应该要加上,表示如果不能让m组都有人就不能统计,但是实际上把这种情况统计进来才能ac,这场出题人素质属实不行。
int main() {
ll n = fast_IO::read(), m = fast_IO::read(), k = fast_IO::read(), x = fast_IO::read();
ll sum = 0;
for (ll a = max(0ll, n / k - m - 5); a <= n / k; ++a) {
if (n - a * k > m * (k - 1))continue;
//if (a + n - a * k < m)continue;
ll res = n - a * k;
ll cnt1 = res % m, cnt2 = m - res % m;
ll x1 = res / m + 1, x2 = res / m;
sum = max(sum, a * (a + 1) / 2 * k + (a + 1 + a + cnt1) * cnt1 / 2 * x1 + (a + cnt1 + 1 + a + cnt1 + cnt2) * cnt2 / 2 * x2);
}
if (sum >= x)printf("YES %lld\n", sum);
else puts("NO");
return 0;
}