Решение задачи Преобразование последовательности с Acmp

Без пояснения   Просмотров: 20


Задана последовательность, содержащая n целых чисел. Необходимо найти число, которое встречается в этой последовательности наибольшее количество раз, а если таких чисел несколько, то найти минимальное из них, и после этого переместить все такие числа в конец заданной последовательности. Порядок расположения остальных чисел должен остаться без изменения.

Код

#include <stdio.h>
#include <vector>
using namespace std;
 
int main()
{
    int n, bb;
    scanf("%d", &n);
    vector<int> a;
    vector<int> b(2000002);
    for(int i = 0; i < n; ++i){
        scanf("%d", &bb);
        a.push_back(bb);
    }
    for(int i = 0; i < a.size(); ++i){
        b[a[i] + 1000000]++;
    }
    int m = 0, pos, k = 0;
    for(int i = 0; i < b.size(); ++i)
        if(b[i] > m){
            m = b[i];
            pos = i;
        }
    pos-=1000000;
    for(int i = 0; i < a.size(); ++i)
        if(a[i] == pos)
            ++k;
        else{
            printf("%d" , a[i]);
            printf(" ");
        }
 
    for(int i = 0; i < k; ++i){
        printf("%d" , pos);
        printf(" ");
    }
    return 0;
}

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться