Решение задачи "Берляндский покер" с Codeforces

Без пояснения   Просмотров: 17


В берляндский покер играют с колодой из n карт, m из которых являются джокерами. В игре участвует k игроков (n делится на k).

В начале игры каждый игрок берет nk карт из колоды (таким образом, каждая карта берется ровно одним игроком). Игрок, у которого максимальное количество джокеров в руке, является победителем, и он получает количество очков, равное x−y, где x — количество джокеров в руке победителя, а y — максимальное количество джокеров среди всех других игроков. Если есть два или более игроков с максимальным количеством джокеров, все они являются победителями, и они получают 0 очков.

Вот несколько примеров:

n=8, m=3, k=2. Если один игрок получает 3 джокера и 1 простую карту, а другой игрок получает 0 джокеров и 4 простые карты, то первый игрок является победителем и получает 3−0=3 очка;
n=4, m=2, k=4. Два игрока получают простые карты, а два других игрока получают джокеры, так что оба они являются победителями и получают 0 очков;
n=9, m=6, k=3. Если первый игрок получает 3 джокера, второй игрок получает 1 джокера и 2 простые карты, а третий игрок получает 2 джокера и 1 простую карту, то первый игрок является победителем, и он получает 3−2=1 очко;
n=42, m=0, k=7. Поскольку джокеров нет, каждый получает 0 джокеров, каждый является победителем, и каждый получает 0 очков.
Для заданных n, m и k вычислите максимальное количество очков, которое игрок может получить за победу в игре.

Код

#include <bits/stdc++.h>
using namespace std;

int main() {
	int tt;
	cin >> tt;
	while (tt--) {
		int n, m, k;
		cin >> n >> m >> k;
		int x = min(n / k, m);
		cout << x - min(n / k, (m - x + k - 2) / (k - 1)) << '\n';
	}
	return 0;
}

         

 Администратор Photo Автор: Администратор


Отправить решение задачи
Чтобы отправить решение вам нужно войти в систему или зарегистрироваться

Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться