Адрес сети получается применением поразрядной конъюнкции маски к IP адресу. Нам же нужно найти наибольшее возможное значение третьего байта маски.
Предположим значение маски с пятым битом слева равным единице: =11111000₂ Тогда применяя конъюнкцию к IP адресу 11001000₂ получаем адрес третьего байта сети: 11001000₂, что не соответствует условию задачи.
А применив значение маски с первыми четырьмя битами равным единице: 11110000₂ к IP адресу 11001000₂ получим как раз искомое значение третьего байта сети: 11000000₂
#include <vector>
#include<iostream>
template <typename T>
inline void swap(T& arg1, T& arg2)
{
T temp = arg1;
arg1 = arg2;
arg2 = temp;
};
template <typename T>
inline void merge(std::vector<T>& vArray, std::vector<T>& vTemp, int head, int middle, int tail)
{
int tmp = 0, lower = head, upper = middle + 1;
while (lower <= middle && upper <= tail)
{
if (vArray[lower] < vArray[upper])
{
vTemp[tmp++] = vArray[lower++];
}
else
{
vTemp[tmp++] = vArray[upper++];
}
}
if (lower <= middle)
{
for (; lower <= middle; vTemp[tmp++] = vArray[lower++]);
}
else
{
for (; upper <= tail; vTemp[tmp++] = vArray[upper++]);
}
int arrayPointer = head;
for (tmp = 0; arrayPointer <= tail; vArray[arrayPointer++] = vTemp[tmp++]);
}
template <typename T>
inline void merge_sort_helper(std::vector<T>& vArray, std::vector<T>& vTemp, int head, int tail)
{
if (head == tail)
{
return;
}
int middle = (head + tail) / 2;
merge_sort_helper(vArray, vTemp, head, middle);
merge_sort_helper(vArray, vTemp, middle + 1, tail);
merge(vArray, vTemp, head, middle, tail);
}
template <typename T>
void merge_sort(std::vector<T>& vArray)
{
std::vector<T> v(vArray.size(), 0);
merge_sort_helper(vArray, v, 0, vArray.size() - 1);
}
int main() {
int n;
std::cin >> n;
std:: vector<int>vArray(n);
for (int i = 0; i < n; i++) {
std:: cin >> vArray[i];
}
merge_sort(vArray);
for (int i = 0; i < n; i++) {
std::cout << vArray[i]<<" ";
}
}
240
Адрес сети получается применением поразрядной конъюнкции маски к IP адресу. Нам же нужно найти наибольшее возможное значение третьего байта маски.
Предположим значение маски с пятым битом слева равным единице: =11111000₂ Тогда применяя конъюнкцию к IP адресу 11001000₂ получаем адрес третьего байта сети: 11001000₂, что не соответствует условию задачи.
А применив значение маски с первыми четырьмя битами равным единице: 11110000₂ к IP адресу 11001000₂ получим как раз искомое значение третьего байта сети: 11000000₂
Объяснение: