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

Оптимизировать и ускорить программу - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ операторы if else http://www.cyberforum.ru/cpp-beginners/thread1635454.html
здраствуйте форумчани вот собственно нужна помощь 1-Ввести 4-х значное число допустим 1991 определить зеркально или нет ( 1+9=10,9+1=10 в суме должно давать,а если 1992 1+9=10,9+2=11 то не зеркально) 2-ввести год определить высококосный он или нет без использование if else 3-ввести 3-х значное число допустим 741 получить обратное 147 4-определить лежит ли точка а на прямой y=kx+b...
C++ Вычислить произведение положительных элементов строки матрицы Пожалуйста, помогите посчитать произведение положительных элементов строки матрицы. Как это можно реализовать? Представления не имею как сделать... O_o #include <iostream> #include <conio.h> using std::cout; using std::cin; using std::endl; http://www.cyberforum.ru/cpp-beginners/thread1635449.html
Подскажите как правильно подключать библиотеки и решения. (функции уже определены в *.obj) C++
Вот тут взял самомопальный aes. Там есть 3 исходных кода. aes.hpp aes.cpp шифратор файлов в режиме CBC 3 - сама программа. 1 и 2 - библиотека и решение.
C++ Нарисовать фигуру используя знак ASCII
Помогите, пожалуйста, нужно нарисовать фигуру как на картинке с помощью знака ASCII. Фигура должна располагаться в середине экрана, при этом ее размер можно задать (при изменении размера она всегда должна оставаться в центре). Начало фигуры в левом нижнем углу. Нужно использовать функцию gotoxy(); и циклы for. Буду благодарна за помощь. Вот что у меня вышло, но тут явно что-то не так: x = 40;...
C++ Приведение к string к char С++ http://www.cyberforum.ru/cpp-beginners/thread1635413.html
Столкнулся с задачей: есть у меня строка с названием st , которая состоит из восьми символов, потом мне надо пройтись по строке переставляя символы по принципу - если данный символ стоит в алфавите ближе к концу по сравнению с другим символом по я их меняю местами и т.д. Т.е чем дальше в алфавите символ, тем он ближе к концу строки. Вот листинг программы for (int i = 0; i < 8; i++) for (int...
C++ Добавить поддержку отрицательных чисел Сделать возможным вывод отрицательных чисел через эту функцию #define pc putchar void lprint(long long int a){ int i=0; char S; while(a>0){ S=a%10+'0'; a=a/10; } подробнее

Показать сообщение отдельно
Vaderkos
 Аватар для Vaderkos
75 / 75 / 3
Регистрация: 31.03.2015
Сообщений: 402
10.01.2016, 16:47     Оптимизировать и ускорить программу
Оптимизировать и ускорить программу. Нужно любое увеличение скорости работы. Может циклы как то подрихтовать, или количество переменных уменьшить. Что она делает.

Дана квадратная матрица M размера n, элементы которой - целые числа.
Дальше R=(m(0), m(1), ..., m(k-1)) массив состоящий из k подматриц матрицы M.
1. Определить количество уникальных сумм подматриц(klasa abstrakcji (не знаю как правильно перевести) из R. 2. Определить количество сумм которые встречались больше всего раз. 3. Найти целую часть среднего арифметического всех сумм.
Ввод
n k
матрица размера n
k-количество координат для подматриц
(две координаты левого угла, две - правого)
Вывод
Пункт1 Пункт2 Пункт3

Ограничения
n [1 ; 10^4], k [1 ; 10^8], M - целые числа [-10^3,10^3]
Лимиты
По времени O(n^2+klgk), по памяти O(n^2+k)

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
;;Ввод
4 8        ;;n k
-2 -2 -3 1     ;;\
3 0 1 3        ;;| сама матрица
1 3 -3 3       ;;|
2 0 0 -2       ;;/
0 0 2 1 ;;\
2 2 2 3 ;;|
1 2 1 3 ;;|Координаты для подматриц
3 2 3 3 ;;|
3 0 3 3 ;;|
0 1 2 1 ;;|
3 3 3 3 ;;|
1 3 1 3 ;;/
;;Вывод:
5 3 0

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
119
120
121
#include <iostream>
#include <map>
#define gc getchar_unlocked
#define pc putchar_unlocked
 
using namespace std;
 
void scan_integer(int* o){
    register int c = gc();
    int x = 0;
    int neg = 0;
    for( ; ((c<48 || c>57) && c != '-'); c = gc() );
    if( c == '-' ) {
        neg = 1;
        c = gc();
    }
    for( ;c>47 && c<58; c = gc() ) {
        x = (x << 1) + (x << 3) + c - 48;
    }
    if( neg )
        x = -x;
    *o = x;
}
 
void lprint(long long int a){
    if(a == 0){
        pc('0');
    }else{
        int i=0;
    bool is_neg = false;
    if (a < 0)
    {
        is_neg = true;
        a *= -1;
    }
    char S[20];
    while(a>0){
        S[i++]=a%10+'0';
        a=a/10;
    }
    if (is_neg) S[i++] = '-';
    i--;
    while(i>=0)
    pc(S[i--]);
    } 
}
 
 
int main() {
    int size, subs_amount;
    map<long long int, long long int> my_map;
    scan_integer(&size);
    scan_integer(&subs_amount);
    
    long long int **my_matrix = new long long int*[size];
    for(int i=0;i<size;i++)
        my_matrix[i] = new long long int [size];
    
    
    for(int i = 0; i < size; i++){
        for(int j = 0; j < size; j++){
            int tmp; scan_integer(&tmp);
            if(i==0 && j==0)
                my_matrix[i][j] = tmp;
            else if(i==0 && j!= 0)
                my_matrix[i][j]  = my_matrix[i][j-1] + tmp;
            else if(i != 0 && j == 0)
                my_matrix[i][j] = my_matrix[i-1][j] + tmp;
            else
                my_matrix[i][j] = my_matrix[i][j-1] + my_matrix[i-1][j] - my_matrix[i-1][j-1] + tmp;
        }
    }
    
    
    long long int temp_sum;
    long long int sum = 0;
    long long int max = 1;
    long long int tmp = 0;
    long long int cnt = 0;
    long long int abstr= 0;
    
    
    for(int i = 0; i < subs_amount; i++){
        int a, b, c, d;
        scan_integer(&a);
        scan_integer(&b);
        scan_integer(&c);
        scan_integer(&d);
        
        temp_sum = my_matrix[c][d];
        
        if(a > 0)
            temp_sum = temp_sum - my_matrix[a-1][d];
        if(b > 0)
            temp_sum = temp_sum - my_matrix[c][b-1];
        if(a > 0 && b > 0)
            temp_sum = temp_sum + my_matrix[a-1][b-1];
            
        
        if(my_map.find(temp_sum) == my_map.end()){
            abstr++;
            my_map.insert(pair<long long int, long long int>(temp_sum, 1));
        }else{
            tmp = my_map.at(temp_sum) + 1;
            my_map.at(temp_sum) = tmp;
            if(tmp > max)
                max = tmp;
        }   
        sum += temp_sum;
    }
    
    for(map<long long int, long long int>::const_iterator it = my_map.begin(); it != my_map.end(); it++){
        if(it->second == max)
            cnt++;
    }
    lprint(abstr); pc(' ');
    lprint(cnt); pc(' ');
    lprint(sum/subs_amount);
    
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru