PDA

Показать полную графическую версию : Двумерные массивы


Hardcore
10-10-2010, 18:29
Given a matix NxM.
Your task is to form one dimention array "B" that wil hold only positive elements from the given matrix sorted in ascending order.
Hint: Use vectors.


Input
First line N and M (1<=N,M<=100).
Then NxM table is given(all number are integers)

Output
First line have to contain total number of positive elements in the matrix.
The next line have to contain all positive elements from the matrix.

Sample input:
3 3
1 0 1
3 -1 0
0 -1 -1

Sample output:
3
1 1 3

pva
10-10-2010, 20:59
не оптимальный, но лаконичный вариант:

vector<row_type> source;
// заполнить как-то source
...

vector<int> result;

// сливаем всё в один
for(vector<vector<int> >::iterator s1=source.begin(), s2=source.end(); s1!=s2; ++s1)
{
result.insert(result.end(), s1->begin(), s1->end());
}

sort(result.begin(), result.end());
// удаляем дубли
result.erase(unique(result.begin(), result.end()), result.end());
// удаляем *j <= 0
result.erase(result.begin(), upper_bound(result.begin(), result.end(), 0));

// дальше вывод
...

lxa85
11-10-2010, 06:05
pva, дубли удалять не надо. Надо отчистить вектор от нулевых и отрицательных элементов.

Кстати, про шифрование потоков "на лету" я слышал.
А можно ли проводить сортировку "на лету" ? Т.е. что бы конечный массив MxN был предварительно отсортирован? Даст ли это выигрыш на стадии конечной сортировки?
При объединение стадий ввода и сортировки, это скорей всего даст сложную работу с поиском в дереве, работу с указателями и т.д.
Зато у нас будет сбалансированное дерево на выходе, и конечный результат будет получен обходом дерева. Хм... интересно :)




© OSzone.net 2001-2012