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

Уменьшение времени работы программы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Напишите программу с if http://www.cyberforum.ru/cpp-beginners/thread994684.html
Предположим, что A говорит: "Или я лжец, или два плюс два - пять". К какому заключению можно прийти на основании этого утверждения?
C++ поскажите или напишите программу с циклом if( 29. Предположим, что A говорит: "Или я лжец, или B рыцарь". Кто из двух персонажей A и B рыцарь и кто лжец? http://www.cyberforum.ru/cpp-beginners/thread994681.html
C++ Переменная в TextBox
пишу в TextBox переменную: float p=1; textBox2->Text = p.ToString(); но допустим у меня g=g+1;
Задача по программированию(неудачный перевод кода) C++
Во время экперимента Накодиллы было случайно получено сообщение инопланетян, содержащее формулу вида A + B = C. Общественности стало интересно, какую же систему счисления используют инопланетяне. Так как внеземная цивилизация была достаточно развита, чтобы отправить межпланетное сообщение, Накодилла предположил, что основание системы счисления довольно мало. Требуется написать программу,...
C++ как понять строку declare http://www.cyberforum.ru/cpp-beginners/thread994676.html
SWITCH_DECLARE(const switch_state_handler_table_t *) switch_core_get_state_handler(_In_ int index); не понятно зачем в возвращаемом параметре стоит Слово const
C++ Составить и проверить функцию, которая переставляет цифры заданного целого числа N1 в обратном порядке и получает новое число N2 8. Составить и проверить функцию, которая переставляет цифры заданного целого числа N1 в обратном порядке и получает новое число N2. Например, если N1=425, то N2=524. подробнее

Показать сообщение отдельно
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
01.11.2013, 18:20     Уменьшение времени работы программы
Слишком много циклов. подсчитывать занятые можно и в первом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
while(n > 0) {
       cin >> x1 >> y1 >> x2 >> y2;
       for(int i = x1; i < x2; i++) {
           for(int j = y1; j < y2; j++) {
               if (!canvas[i][j]) {
                    ++c;
                    canvas[i][j] = 1;
               }
           }
       }
       n-=1;
   }
Эээ... А как ты файл использовал то? Если будешь использовать - для ускорения посоветую читать не посимвольно/по словам, а раз прочитать в какой-нибудь буфер(скажем, массив), и оттуда в нужном порядке извлекать данные. Поможет stl'евские copy, ostream_iterator и vector.
А еще (хз, мож тут и не заметно будет) можно развернуть матрицу в массив(т.е. память выделять один раз), и обращаться как [I] a[j] -> a[j*width+i]. Опять же, на таких данных может прироста и не заметишь...хотя по идее при больших размерах массива это будет быстрее(выделение памяти чертовски накладная операция)

Ах да, инициализацию можно занести туда:
C++
1
2
3
4
for(int i = 0; i < w; i++) { 
canvas[i] = new int[h]; 
for(int j = 0; j < h; j++) canvas[i][j] = 0;
}
Или воспользоваться memset, вроде должно быть быстрее:
C++
1
2
3
4
for(int i = 0; i < w; i++) { 
canvas[i] = new int[h]; 
memset(canvas[i], 0, sizeof(int)*h);
}
 
Текущее время: 10:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru