Easy_'s blog

By Easy_, 10 years ago, In Russian

Всем привет, у меня вопрос по очень простой задаче из 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;
}
  • Vote: I like it
  • +3
  • Vote: I do not like it