Матч 302, Игра с мячом (XBallGame)

Дивизион 2, Уровень 2

 

Имеется список имен игроков и позиции, на которых они могут играть. Имя игрока в списке встречается столько раз, на скольких позициях он может играть. Фаны хотят переделать этот список в новый формат. Новый формат содержит столько же строк, сколько и старый. Порядок следования игроков в новом формате остался прежним. Каждая строка нового формата содержит имя игрока, дефис и список его позиций, разделенный точкой с запятой. Первая позиция в списке должна быть такой же, как и в старом формате, все остальные позиции должны быть отсортированы в алфавитном порядке.

 

Класс: XBallGame

Метод: vector<string> newStatistics(vector<string> placeboard)

Ограничения: placeboard содержит от 1 до 50 элементов, каждый элемент placeboard[i] содержит от 4 до 23 символов в формате “имя-позиция”. Позицией является строка из двух символов ‘A’-‘Z’. Именем является строка, содержащая от 1 до 20 символов ‘a’ – ‘z’, ‘A’-‘Z’.

 

Вход. Массив, содержащий список игроков в формате “имя-позиция”.

 

Выход. Массив, содержащий список игроков в новом формате.

 

Пример входа

placeboard

{"John-DH", "Jack-SP",

"Sam-OF", "John-SP",

"John-RP"}

{"John-DH", "Jack-SP",
"Sam-OF", "John-SP",
"John-RP", "John-RA",
"John-RZ", "Jack-OF",

"Sam-SP"}

 

Пример выхода

{"John-DH,RP,SP", "Jack-SP", "Sam-OF", "John-SP,DH,RP", "John-RP,DH,SP"}

{"John-DH,RA,RP,RZ,SP", "Jack-SP,OF", "Sam-OF,SP", "John-SP,DH,RA,RP,RZ",

"John-RP,DH,RA,RZ,SP", "John-RA,DH,RP,RZ,SP", "John-RZ,DH,RA,RP,SP",

"Jack-OF,SP", "Sam-SP,OF"}

 

 

 

РЕШЕНИЕ

обработка строк

 

Для каждого имени игрока перебираем весь список и ищем позиции, на которых он может играть. Полученный список позиций заносим в массив pos и сортируем в алфавитном порядке. Формируем строку – информацию об игроке согласно требуемым правилам.

 

ПРОГРАММА

 

#include <cstdio>

#include <vector>

#include <string>

#include <algorithm>

using namespace std;

 

class XBallGame

{

public:

  vector<string> newStatistics(vector<string> placeboard)

  {

    string player, player1;

    int i, j;

    vector<string> res(placeboard.size());

    for(i = 0; i < placeboard.size(); i++)

    {

      int size = placeboard[i].size();

      player = placeboard[i].substr(0,size - 3);

      vector<string> pos;

      for(j = 0; j < placeboard.size(); j++)

      {

        if (j == i) continue;

        player1 = placeboard[j].substr(0,placeboard[j].size() - 3);

        if (player1 == player)

          pos.push_back(placeboard[j].substr(placeboard[j].size() - 2));

      }

      sort(pos.begin(),pos.end());

      res[i] = placeboard[i];

      for(j = 0; j < pos.size(); j++) res[i] = res[i] + ',' + pos[j];

    }

    return res;

  }

};