MyTetra Share
Делитесь знаниями!
Автобусные остановки 3 (через set)
Время создания: 02.08.2017 11:41
Раздел: Computer - Programming - C++ - Coursera White_Belt

/*

В этой задаче вам нужно присваивать номера автобусным маршрутам.

А именно, для каждого маршрута, заданного множеством

названий остановок, нужно либо выдать новый номер

(первому маршруту — 1, второму — 2 и т. д.),

либо вернуть номер существующего маршрута,

которому соответствует такое множество остановок.


В отличие от задачи «Автобусные остановки — 2»,

наборы остановок, которые можно получить друг из друга

перестановкой элементов или добавлением/удалением повторяющихся,

следует считать одинаковыми.


Формат ввода

Сначала вводится количество запросов Q, затем Q описаний запросов.

Каждый запрос представляет собой положительное

количество остановок N, за которым следуют разделённые

пробелом N названий остановок соответствующего маршрута

(не обязательно различных). Названия остановок состоят

лишь из латинских букв и символов подчёркивания.


Формат вывода

Выведите ответ на каждый запрос в отдельной строке.

Если маршрут с данным набором остановок уже существует,

в ответ на соответствующий запрос выведите Already exists for i,

где i — номер маршрута с таким набором остановок.

В противном случае нужно выделить введённому набору остановок

новый номер i и вывести его в формате New bus i.

*/


#include <iostream>

#include <vector>

#include <map>

#include <set>


using namespace std;


int main()

{

map<set<string>, unsigned int> buses;

unsigned int q;

unsigned int number = 0;


cin >> q;

while(q)

{

set<string> stations;

string station;

unsigned int n;

cin >> n;

while(n)

{

cin >> station;

stations.insert(station);

--n;

}

if(buses.count(stations))

{

cout << "Already exists for " << buses[stations];

}

else

{

++number;

buses[stations] = number;

cout << "New bus " << number;

}

cout << "\n";

--q;

}

system("pause");

return 0;

}

Так же в этом разделе:
 
MyTetra Share v.0.53
Яндекс индекс цитирования