Матч 37, Наилучший отель (BestHotel)

 

В городе расположено некоторое множество отелей, каждый из которых характеризуется ценой и качеством. Цена i - го отеля содержится в price[i], качество – в quality[i]. Будем говорить, что отель Х непривлекательный, если существует отель Y с не худшими характеристиками (не большей ценой и не меньшим качеством), но при этом одна из характеристик (или обе) строго лучше. По заданным массивам цены price и качества quality необходимо подсчитать количество непривлекательных отелей в городе.

 

Класс: BestHotel

Метод: int numberOfDisadvantageous(vector<int> price,

                                   vector<int> quality)

Ограничения: price и quality содержат одинаковое количество элементов, от 1 до 50, 1 £ price[i], quality[i] £ 1000.

 

Вход. Массивы цены price и качества quality, характеризующие отели в городе.

 

Выход. Количество непривлекательных отелей в городе.

 

Пример входа

price

quality

{100,200}

{3,3}

{100,200,300}

{5,4,3}

{200,300,100,500,100,100,200}

{7,7,4,8,4,3,6}

 

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

1

2

3

 

 

РЕШЕНИЕ

элементарные вычисления

 

Просматриваем каждую пару (price[i], quality[i]), соответствующую характеристикам i - го отеля, и запускаем функцию disAdvant(price, quality, i), которая ищет отель, лучший i - го. j - ый отель лучше i - го, если одна из характеристик j - го отеля строго лучше, а вторая – не хуже. Функция disAdvant возвращает 1, если i - ый отель непривлекательный и 0 иначе. В переменной res подсчитываем количество непривлекательных отелей.

 

ПРОГРАММА

 

#include <cstdio>

#include <vector>

using namespace std;

 

int disAdvant(vector<int> &price,vector<int> &quality,int i)

{

  for(int j = 0; j < price.size(); j++)

  {

    if ((price[j] < price[i]) && (quality[j] >= quality[i])) return 1;

    if ((price[j] <= price[i]) && (quality[j] > quality[i])) return 1;

  }

  return 0;

}

 

class BestHotel

{

public:

  int numberOfDisadvantageous(vector<int> price, vector<int> quality)

  {

    int i, res;

    for(res = i = 0; i < price.size(); i++)

     if (disAdvant(price,quality,i)) res++;

    return res;

  }

};