Форум программистов, компьютерный форум CyberForum.ru

Нужно оптимизировать код - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Странная ошыбка http://www.cyberforum.ru/cpp-beginners/thread968246.html
Всём привет Есть такая проблема: при использовании qsort(&c, c.size(), sizeof(int), compare) Кидает ексепшен, почёму понять не могу. Вот весь код: #include <iostream> #include <vector> int compare(const void* a, const void* b) { return ( *(int*) a - *(int*)b );
C++ Работа со структурой данных, чтение/сохранение во внешний файл помогите разобраться с задачкой!! {Написать программу, представляющую собой простейшую систему для управления данными. Исходные данные для программы хранятся в текстовом файле в виде строк. Для создания файла с исходными данными следует использовать простейший текстовый редактор или редактор инструментальной среды разработки. Количество строк, требования к содержимому строки, способ... http://www.cyberforum.ru/cpp-beginners/thread968244.html
В числе зачеркнули первую справа цифру и приписали ее слева - вывести полученное число C++
#include <iostream> #include <stdio.h> #include <math.h> #include <conio.h> int main(int argc, char** argv) { float d,c; int b,a; printf ("vvedite trhznachnoe chislo ");
что тут делать ? C++
Наведите объявления переменных в цикле, который увеличивает переменную с именем totalDartsInCircle если Расположение дротик находится в пределах радиуса круга. Вы будете нужно использовать формулы евклидовой расстояния ({d}^{2} = {x}^{2}+{y}^{2}). (Предположим, что для момент, totalDartsInCircle уже была объявлена​​.)
C++ Чтение файла построчно http://www.cyberforum.ru/cpp-beginners/thread968232.html
Требуется занести в массивы строчки. В каждый массив своя строчка. Для этого решил использовать массив объектов. #include<iostream> #include<fstream> using namespace std; const int def = 10000; class arr {private: int a,m; public:
C++ Произвести следующую обработку 15 вещественных чисел Произвести следующую обработку 15 вещественных чисел: найти среднее арифметическое отрицательных чисел и подсчитать количество чисел, входящих в диапазон .(без использования массива; с помощью одномерного массива). подробнее

Показать сообщение отдельно
Dmitriy_M
1294 / 1175 / 104
Регистрация: 20.03.2009
Сообщений: 4,210
Записей в блоге: 11
05.10.2013, 15:22     Нужно оптимизировать код
Цитата Сообщение от mat_for_c Посмотреть сообщение
а зачем выводить те числа, которые встретятся в NO??
В случае когда идет несколько раундов YES, NO, то из множества YES делаешь вычитания текущего множества NO.
Дальше NO тебе не нужен.
Цитата Сообщение от BabyGluk Посмотреть сообщение
но только если не заполнить его от 1 до макс, то в логах все тесты фейл, и всеравно последний "время".. =(

Начни думать, а не тупа печатать STL алгоритмы. Распространенная реализация std::set это дерево, конструирование дерева, обход дерева это оверхед. Если входные данные всегда упорядоченны и не содержат повторяющихся элементов, то реализация на упорядоченных списках будет побыстрее работать.

У тебя два множества yes и no, различные ситуации можно определить по состоянию yes и no.
Если ничего не забыл, то будет как то так
Кликните здесь для просмотра всего текста

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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <iostream>
#include <set>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>
#include <iterator>
using namespace std;
 
int main(int argc, char* argv[])
{
    set<int> yes, no;
    int max;
    string str;
    cin >> max;
 
    while (str != "HELP")
    {
        getline(cin, str);
        stringstream ss;
        ss.str(str);
        set<int> input;
        int word;
        while (ss >> word)
        {
            input.insert(word);
        }
        if (str == "YES")
        {
            if(yes.empty())
            {
                // не разу не был YES
                yes = input;
                if(!no.empty())
                {
                    //вычитаем множество no из yes
                    std::set<int> result;
                    set_difference(yes.begin(), yes.end(), no.begin(), no.end(),
                            inserter(result, result.end()));
                    yes = result;
                    no.clear();
                }
            }
            else
            {
                // второй и более YES
                std::set<int> result;
                set_intersection(yes.begin(), yes.end(), input.begin(), input.end(),
                        inserter(result, result.end()));
                yes = result;
            }
        }
        if (str == "NO")
        {
            if(yes.empty())
            {
                // не было ни одного YES
                // накапливаем NO
                no.insert (input.begin (), input.end());
            }
            else
            {
                //вычитаем входное множество из yes
                std::set<int> result;
                set_difference(yes.begin(), yes.end(), input.begin(), input.end(),
                        inserter(result, result.end()));
                yes = result;
            }
        }
    }
 
    if(yes.empty() && !no.empty())
    {
        // не было ни одного YES
        // выводим разность [1..n] и no
        typedef set<int>::const_iterator Iterator;
        Iterator noItr(no.begin());
        Iterator endItr(no.end());
        for(int i = 1; i < max; ++i)
        {
            if(noItr != endItr)
            {
                if(i<*noItr)
                {
                    std::cout<<i;
                }
                else
                {
                    // i есть в NO
                    // пропускаем
                    ++noItr;
                }
 
            }
            else
            {
                cout<<i<<" ";
            }
 
        }
    }
    if(!yes.empty() && no.empty())
    {
        // ответ в yes.
        //...
    }
    if(yes.empty() && no.empty())
    {
        // вырожденный случай
        // не было ни YES, ни NO, а сразу HELP
        for(int i = 1; i< max; ++i)
        {
            cout<<i<<" ";
        }
 
    }
    return 0;
}
 
Текущее время: 05:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru