Generation

language from codeWed, 03 May 2023

#include <iostream> #include <vector> #include <algorithm> #include <cassert> using namespace std; vector<vector<int>> arrange_players(int n, int m, int k, vector<int> seats_per_table) { /* Функция, которая рассаживает игроков за столами так, чтобы каждый игрок побывал за столом с наибольшим количеством игроков за m дней. :param n: int - количество игроков :param m: int - количество дней :param k: int - количество столов :param seats_per_table: vector<int> - список, содержащий количество посадочных мест за каждым столом :return: vector<vector<int>> - список списков, где каждый вложенный список представляет собой игроков, сидящих за определенным столом */ // Проверяем, что общее количество посадочных мест совпадает с общим количеством игроков int total_seats = 0; for (int i = 0; i < k; i++) { total_seats += seats_per_table[i]; } assert(n == total_seats && "Общее количество посадочных мест не совпадает с общим количеством игроков"); // Создаем список, где каждый элемент представляет собой стол и его количество посадочных мест vector<pair<int, int>> tables; for (int i = 0; i < k; i++) { tables.push_back(make_pair(i, seats_per_table[i])); } // Создаем список, где каждый элемент представляет собой игрока и количество дней, в которые он уже сидел за каждым столом vector<pair<int, vector<int>>> players; for (int i = 0; i < n; i++) { vector<int> table_days(k, 0); players.push_back(make_pair(i, table_days)); } // Создаем список, где каждый элемент представляет собой список игроков, сидящих за определенным столом vector<vector<int>> table_players(k); // Перебираем каждый день и рассаживаем игроков за столами for (int day = 0; day < m; day++) { // Сортируем столы по убыванию количества посадочных мест sort(tables.begin(), tables.end(), [](auto &left, auto &right) { return left.second > right.second; }); // Перебираем каждый стол и садим за него игроков for (auto &table : tables) { // Проверяем, есть ли еще свободные места за столом if (table_players[table.first].size() < table.second) { // Сортируем игроков по убыванию количества дней, проведенных за столом sort(players.begin(), players.end(), [table](auto &left, auto &right) { return left.second[table.first] > right.second[table.first]; }); // Добавляем игрока за стол auto player = players[0]; table_players[table.first].push_back(player.first); // Увеличиваем количество дней, проведенных игроком за столом player.second[table.first]++; players[0] = player; } } } return table_players; } int main() { vector<int> seats_per_table = {6, 3, 5, 2}; auto table_players = arrange_players(16, 5, 4, seats_per_table); for (auto &table : table_players) { cout << "Table " << &table - &table_players[0] << ":\\n"; for (auto &player : table) { cout << "Player " << player << endl; } } return 0; } vector<int> seats_per_table = {6, 3, 5, 2}; auto table_players = arrange_players(16, 5, 4, seats_per_table); for (auto &table : table_players) { cout << "Table " << &table - &table_players[0] << ":\\n"; for (auto &player : table) { cout << "Player " << player << endl; } }

#include <iostream> #include <vector> #include <algorithm> #include <cassert> using namespace std; vector<vector<int>> arrange_players(int n, int m, int k, vector<int> seats_per_table) { /* Функция, которая рассаживает игроков за столами так, чтобы каждый игрок побывал за столом с наибольшим количеством игроков за m дней. :param n: int - количество игроков :

Questions about programming?Chat with your personal AI assistant