Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 05.02.2020
Сообщений: 4

Нужно ускорить код. Буду очень благодарен

05.02.2020, 22:28. Показов 929. Ответов 9
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Условие задачи: Вводиться число n, затем вводятся n чисел. Нужно с последней введенной цифры до первой вывести число, и сколько раз оно повторяется. Числа при выводе не должны повторятся.
Пример:
ввод:
5
4 1 2 4 1
вывод:
1 2
4 2
2 1
Вертел задачу как мог, но по времени не все тесты проходит.
Лучшее чего добился на C++:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
 
using namespace std;
int main()
{
    int i,mem,kol,n;
    cin>>n;.                  
    int m[200000];
    
    for (i=0; i<n; i++)
    {
        cin>>m[i];
        
    }
    i=n-1;
    
    while (i>=0)
    {
      
        if (m[i]>=0)
        {
          
          mem=m[i];
          kol=0;
          for (int x = 0; x<i+1;x++){
            if (m[x]==mem){
              kol++;
              m[x]=-1;
            }
          }
          cout<<mem<<"\t"<<kol<<endl;
        }
    i=i-1;
    
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.02.2020, 22:28
Ответы с готовыми решениями:

Нужно пройти тесты, буду очень благодарен!
Тесты по программированию с++ П.5.18.Правил Запрещено размещать задания и решения в виде картинок и других файлов с их текстом.

Переведите пожалуйста код из С# в С++ Буду очень благодарен
Переведите пожалуйста код из С# в С++ Буду очень благодарен using System; using System.Collections.Generic; using System.Linq; ...

Нужно переделать проекты через указатели.Буду очень благодарен)
Переделать всё через указатели. №1 Удалить элементы кратные 7. Добавить после каждого нечетного элемента массива элемент со значением...

9
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
05.02.2020, 23:39
Цитата Сообщение от dimas3 Посмотреть сообщение
Нужно с последней введенной цифры до первой вывести число
Точно цифры? Или всё же числа.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38171 / 21106 / 4307
Регистрация: 12.02.2012
Сообщений: 34,697
Записей в блоге: 14
05.02.2020, 23:51
Формулировка, изложенная по-человечески: определить, сколько раз введено каждое из n чисел.
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
05.02.2020, 23:53
Вот такой алгоритм родился. Новый алгоритм - функция solve1, старый - solve2. Число элементов и макс. значение задаются в начале функции main. При больших значениях лучше отключить вывод в начале программы (макросы PRINT_VECTOR и PRINT_RESULT).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <cstdlib>
 
// 1 - выводить, 0 - не выводить
#define PRINT_VECTOR 0
#define PRINT_RESULT 0
 
 
void solve1(std::vector<int> &v)
{
    std::map<int, int> m;
 
    for (int x: v)
    {
        m[x]++;
    }
 
    std::set<int> processedValues;
    size_t nUniqValues = m.size();
 
    for (int i = v.size()-1; i >= 0; i--)
    {
        int &x = v[i];
        if (processedValues.find(x) != processedValues.end())
            continue;
 
        #if PRINT_RESULT
        std::cout << x << ":\t" << m[x] << "\n";
        #endif
        processedValues.insert(x);
        
        if (processedValues.size() == nUniqValues)
            break;
    }
}
 
void solve2(std::vector<int> &m)
{
    int i=m.size()-1;
    int mem, kol;
    
    while (i>=0)
    {
      
        if (m[i]>=0)
        {
          
          mem=m[i];
          kol=0;
          for (int x = 0; x<i+1;x++){
            if (m[x]==mem){
              kol++;
              m[x]=-1;
            }
          }
        #if PRINT_RESULT
          std::cout<<mem<<"\t"<<kol<<"\n";
        #endif
        }
    i=i-1;
    
    }
}
 
 
int main()
{
    const size_t N = 20; // или 200000
    const size_t maxValue = 9; // или 5000
    
    std::vector<int> v(N);
 
    for (size_t i = 0; i < v.size(); i++)
    {
        v[i] = 1 + rand() % maxValue;
        #if PRINT_VECTOR
        std::cout << v[i] << ' ';
        #endif
    }
    std::cout << "\n\n";
 
    std::cout << "Solve 1:\n" << std::flush;
    solve1(v);
    std::cout << " done\n";
 
    std::cout << "Solve 2:\n" << std::flush;
    solve2(v);
    std::cout << " done\n";
}
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38171 / 21106 / 4307
Регистрация: 12.02.2012
Сообщений: 34,697
Записей в блоге: 14
05.02.2020, 23:53
Цитата Сообщение от dimas3 Посмотреть сообщение
Числа при выводе не должны повторятся.
Цитата Сообщение от dimas3 Посмотреть сообщение
Вводиться число n
-
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
05.02.2020, 23:55
Чем больше maxValue (при достаточно большом N), тем заметнее разница времени выполнения solve1 и solve2.
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,268
06.02.2020, 01:09
Какое максимальное n (200000?), какими максимальными числами заполнять массив (5000?), какие требования по времени?
Быстродействие будет зависеть и от производительности компьютера.
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
06.02.2020, 08:29
Цитата Сообщение от alexu_007 Посмотреть сообщение
Какое максимальное n (200000?), какими максимальными числами заполнять массив (5000?), какие требования по времени?
Быстродействие будет зависеть и от производительности компьютера.
Это уже вопросы к автору. В моём коде значения 200000 и 5000 взяты для примера, чтобы наглядно продемонстрировать разницу в скорости работы двух алгоритмов. Но судя по размеру массива в коде автора, величина n не должна быть больше 200000.
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,268
06.02.2020, 09:01
Цитата Сообщение от likehood Посмотреть сообщение
Это уже вопросы к автору. В моём коде значения 200000 и 5000 взяты для примера
У меня с такими значениями всё (заполнение списка случайными числами, подсчёт, вывод результата на экран) выполнилось за время чуть меньше секунды. А у вас?
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
06.02.2020, 09:04
Цитата Сообщение от alexu_007 Посмотреть сообщение
У меня с такими значениями всё (заполнение списка случайными числами, подсчёт, вывод результата на экран) выполнилось за время чуть меньше секунды. А у вас?
Первый алгоритм - да, очень быстро. Второй - значительно дольше.

Точнее, второй (solve2) - это на самом деле первый, то есть приведённый автором в первом сообщении. А первый (solve1) - это уже моя, новая версия. Лучше было их иначе обозначить, но что уж теперь делать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.02.2020, 09:04
Помогаю со студенческими работами здесь

Ребзя, спасите, меня отчисляют, нужно капец(! Всем неравнодушным буду очень благодарен. не хочу в армейку(
З лабы, спасайте( 1. Лабораторная работа: Задача: Объявить класс и в нем реализовать следующие требования: • Продемонстрировать...

приведите конкретный пример выражения x = a^z mod n, буду очень благодарен)
x = a^z mod n

Народ, буду очень благодарен, если поможете написать решение задания на C++
{deleted} Задание на фото. Прошу помогите. Буду очень благодарен

Разработать программу, которая вводит данные и выводит текст TRUE, буду очень благодарен
Задание 1 Постановка задачи. Разработать программу, которая вводит данные и выводит текст TRUE, если указанное в варианте условие...

Код програмы поможите очень нужно, буду благодарен очень: y=cos(x)+1
Функиция: y=cos(x)+1 Промежуток Шаг 0,5


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru