Матч
314, Мычание
коров (MooingCows)
Дивизион 2,
Уровень 1
Коровы пасутся на поле
прямоугольной формы, разбитой на n*m единичных квадратов. Каждый
квадрат может быть или пустым, или занятым одной коровой. Корова, мычащая в
позиции (x, y), создает неудовлетворение корове
в позиции (i, j), равное квадрату расстояния
между ними: (x - i)2
+ (y – j)2. Всеобщее неудовлетворение равно сумме неудовлетворений для
всех коров. Известно, что мычать может только одна корова.
Необходимо определить наименьшее
возможное всеобщее неудовлетворение, которое может создавать одна корова.
Класс: MooingCows
Метод: int dissatisfaction(vector<string>
farmland)
Ограничения:
farmland
содержит от 1 до 50 строк, каждая строка farmland[i] содержит
до 50 символов ‘C’ и ‘.’.
Вход. Массив строк farmland, описывающий поле с коровами.
Выход. Наименьшее всеобщее неудовлетворение от мычания одной коровы.
Пример входа
farmland |
{"C..", ".C.", ".C."} |
{"CCCC", "CCCC", "CCCC"} |
{"C"} |
Пример выхода
3
26
0
РЕШЕНИЕ
обработка строк + элементарные
вычисления
Проходим по массиву farmland и для каждой коровы вычисляем всеобщее неудовлетворение
для других коров, которое она может создавать своим мычанием. Среди всех вычисленных
всеобщих неудовлетворений находим наименьшее.
ПРОГРАММА
#include <cstdio>
#include <vector>
#include <string>
using namespace std;
class MooingCows
{
public:
int dissatisfaction(vector<string> farmland)
{
int sum, res = 2000000000;
int n = farmland.size(), m =
farmland[0].size();
int i, j, i1, j1;
for(i = 0; i < n; i++)
for(j = 0; j < m; j++)
if (farmland[i][j] == 'C')
{
sum = 0;
for(i1 = 0; i1 < n; i1++)
for(j1 = 0; j1 < m; j1++)
if (farmland[i1][j1] == 'C')
sum += (i1 - i) *
(i1 - i) + (j1 - j) * (j1 - j);
if (sum < res) res = sum;
}
return res;
}
};