Всем привет, у меня вопрос по очень простой задаче из acmp.ru ( Преобразование последовательности — 2 )
Вот таким образом я ее пытался решить:
#include <fstream>
#include <algorithm>
#include <map>
#define LL long long
using namespace std;
fstream in("input.txt"), out("output.txt", ios::out);
int B[105], N, k, mi, mv, i;
map<int, int> A;
int main()
{
in >> N;
for(; in >> k; A[k]++, B[i++] = k)
if(A[k] > mv)
mv = A[k], mi = k;
else
if(A[k] == mv)
mi = min(mi, k);
for(i = 0; i < N; i++)
if(B[i] != mi)
out << B[i] << " ";
if(mv)
for(i = 0; i <= mv; i++)
out << mi << " ";
return 0;
}
Когда у себя на компе тестирую тесты, то выходные данные правильные, а как задачу отправляю на проверку, то сразу ошибка на первом тесте пишет. Не могу понять в чем ошибка.
Может кто-то из вас догадается? Я подозреваю, что где-то за пределы массивы выходу и т.п.
Переписал тот же алгоритм, только еще более извращенее, которое прошла все тесты:
#include <fstream>
#include <algorithm>
#include <map>
#define LL long long
using namespace std;
fstream in("input.txt"), out("output.txt", ios::out);
class Q
{
public:
int value;
int count;
} B[105];
int C[105], N, k, q, i;
map<int, int> A;
int CMP(const Q &a, const Q &b)
{
return a.count > b.count;
}
int CMP_(const Q &a, const Q &b)
{
return a.value < b.value;
}
int main()
{
in >> N;
for(; in >> k; A[k]++, C[i++] = k);
for(i= 0; i < N; i++)
B[i].value = C[i], B[i].count = A[C[i]];
sort(B, B + N, CMP);
sort(B, B + B[0].count, CMP_);
for(i = 0; i < N; i++)
if(C[i] != B[0].value)
out << C[i] << " ";
for(i = 0; i < B[0].count; i++)
out << B[0].value << " ";
return 0;
}