Матч
299, Проекции (Projections)
Дивизион 2, Уровень
2; Дивизион 1, Уровень 1
Имеется двумерная таблица, каждая
ячейка которой или пустая, или занятая. Строки front и right характеризуют фронтальную
и боковую проекцию: i - ый элемент front
содержит ‘x’, если в i - ой колонке
имеется хотя бы одна занятая ячейка, и символ ‘.’, если вся i - ая колонка пустая. Аналогично i - ый элемент right содержит ‘x’, если в i - ой строке имеется хотя бы одна
занятая ячейка, и символ ‘.’, если вся i
- ая строка пустая. По двум строкам front и right необходимо определить минимально и
максимально возможное количество занятых ячеек в таблице.
Класс: Projections
Метод: vector<int> count(string front, string right)
Ограничения: массивы front
и right содержат от 1 до 50 элементов,
каждый элемент массивов содержат ‘x’ или ‘.’.
Вход. Два строковых массива front и right, содержащие символы ‘x’ и ‘.’.
Выход. Массив целых чисел, содержащий два числа: минимально и
максимально возможное количество занятых ячеек в таблице.
Пример входа
front |
right |
“x” |
“x” |
“x.” |
“.x” |
“xxxx” |
“x..x” |
“x...xx..x.xxx..x.xx.” |
".xx..xxx.xx." |
Пример выхода
{1, 1}
{1, 1}
{4, 8}
{10, 70}
РЕШЕНИЕ
математика
Вычислим количество символов ‘x’ в массивах front и right и занесем его в переменные xf и xr. Минимально возможное количество занятых ячеек равно max(xf,
xr), максимально возможное равно xf * xr.
ПРОГРАММА
#include <cstdio>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
class Projections
{
public:
vector<int> count(string front,
string right)
{
vector<int> res(2);
int xf =
std::count(front.begin(),front.end(),'x');
int xr =
std::count(right.begin(),right.end(),'x');
res[0] = max(xf,xr); res[1] = xf*xr;
return res;
}
};