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

Ошибка во время выполнения программы. - C++

Восстановить пароль Регистрация
 
KnockKnock
 Аватар для KnockKnock
1 / 1 / 0
Регистрация: 04.11.2012
Сообщений: 11
04.11.2012, 21:50     Ошибка во время выполнения программы. #1
Здравствуйте, помогите, пожалуйста, разобраться. Пытаюсь сдать задачу, из 27 тестов в трех - ошибка во время выполнения программы.

Условие:
Кликните здесь для просмотра всего текста
Как и у каждого мальчика, у Феди есть игрушечные машинки. Однако ему повезло больше, чем обычному мальчику — все n его машинок являются радиоуправляемыми. Целыми днями он может устраивать различные автогонки и играть с друзьями.

Из всех видов гонок Федя предпочитает гонки по прямой. В данном формате соревнования трасса имеет форму прямой и является бесконечной (соревнования идут до тех пор, пока Феде это не надоест). Изначально каждая из n машинок находится на некотором расстоянии от старта — имеет фору xi метров. По команде все машинки начинают свое движение от старта, при этом каждая машинка движется во время гонки с постоянной скоростью vi метров в секунду. Все машинки движутся в одном направлении — удаляются от старта.

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

Так как этого события можно ждать очень долго, Федя хочет настроить камеру на автоматическое включение во время обгона. Однако, Федя самостоятельно не может найти время, которое пройдет со времени начала гонки до времени первого обгона. Помогите Феде — напишите программу, находящую искомую величину.

Формат входных данных
В первой строке входного файла содержится единственное число n — количество машинок на трассе (2 <= n <= 100). Каждая из следующих n строк содержит по два целых числа xi и vi — расстояние от старта (в метрах) и скорость машинки i (в метрах в секунду) соответственно (1<= xi,vi <= 1000).

Исходно никакие две машинки не находятся в одной точке. Гарантируется, что хотя бы один обгон во время гонки произойдет.

Формат выходных данных
В выходной файл выведите количество секунд, которое пройдет с момента старта до момента первого обгона, с точностью не менее 5 знаков после десятичной точки.


Решение-то простое, перебираем машинки, ищем пары, где у одной скорость больше, а координата меньше, затем выбираем минимум из решений. Сразу оговорюсь, писал без оптимизаций

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
#include <iostream>
using namespace std;
 
 
int main ()
{
    long n, k;
    double x [101];
    double v [101];
 
    double res [101];
 
    cin >> n;
 
    for (long i = 0; i < n; i++)
    {
        cin >> x[i] >> v[i];
    }
 
    
    k = 0;
 
    for (long i = 0; i < n; i++)
        for (long j = 0; j < n; j++)
        {
            if (i == j) continue;
            if ( (v[i] > v[j]) && (x[i] < x[j]) ) {
                res [k] = (x[j] - x[i]) / (v[i] - v[j]);
                k++;
            }
        }
        
    
    double min = res [0];
    for (long i = 0; i < k; i ++) {
        if (res[i] < min) min = res [i];
    }
    
    
    cout << min;
 
 
    return 0;
}
Скорости гарантированно разные при делении, значит, на ноль не должно быть деления... В чём может быть проблема?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2012, 21:50     Ошибка во время выполнения программы.
Посмотрите здесь:

C++ Определить время выполнения программы
Определить время выполнения программы C++
C++ Определить время выполнения программы
Посчитать время выполнения программы C++
Как вы тестируете время выполнения программы? C++
C++ Определить время выполнения этой программы
C++ Укажите где ошибка (ошибка во время выполнения программы)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
04.11.2012, 21:59     Ошибка во время выполнения программы. #2
Ошибка во время выполнения - завалился тест или прога вылетела?

Добавлено через 1 минуту
если второе, то проблема в этом
C++
1
double res [101];
т.е. фиксированный размер массива
и здесь:
C++
1
res [k] = (x[j] - x[i]) / (v[i] - v[j])
может произойти выход за границы массива
Пример. 100 машинок, которые расположены так, что чем ближе к старту, тем выше скорость. Соответственно, нужно перебрать все возможные пары, которых наверняка больше 101
KnockKnock
 Аватар для KnockKnock
1 / 1 / 0
Регистрация: 04.11.2012
Сообщений: 11
04.11.2012, 23:03  [ТС]     Ошибка во время выполнения программы. #3
Это именно ошибка в процессе. На сайте отправляешь cpp-файл, он компилируется и прогоняется через некоторое количество тестов. В комментариях к заваленному тесту указано только, что прога вылетает...
Делал размеры массивов с запасом (каждый по 2 тысячи, например), не спасает положение.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
04.11.2012, 23:08     Ошибка во время выполнения программы. #4
А этот массив вообще нужен? Разве нельзя на ходу считать минимум?

Добавлено через 2 минуты
Я про double res [101];

И "с запасом" если и делать, то надо учитывать самый плохой случай, который я указал выше. Это примерно 5000 вариантов
KnockKnock
 Аватар для KnockKnock
1 / 1 / 0
Регистрация: 04.11.2012
Сообщений: 11
04.11.2012, 23:27  [ТС]     Ошибка во время выполнения программы. #5
В этом была причина, да... Забыл нормально посчитать максимальное количество результатов =\
Переписал без массива, прошло все тесты. Спасибо за верную мысль.
Ведь хотел же сразу нормально написать, зачем-то решил с массивом делать =\
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
04.11.2012, 23:29     Ошибка во время выполнения программы. #6
KnockKnock, отсортируйте машинки по удаленности от старта, тогда минимум нужно будет искать между парами x[i] и x[i-1]. Максимум 99 вариантов.
KnockKnock
 Аватар для KnockKnock
1 / 1 / 0
Регистрация: 04.11.2012
Сообщений: 11
04.11.2012, 23:34  [ТС]     Ошибка во время выполнения программы. #7
Да я перед написанием подумал, что сортировать по затратам времени не сильно выгоднее, чем просто сравнить каждую с каждой в обеих сочетаниях, а потом вот сильно залип над этой ошибкой. Собственно, из-за мыслей о максимум 99 вариантах при сортировке и забыл напрочь про размер массива res...
Venzo
 Аватар для Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
04.11.2012, 23:35     Ошибка во время выполнения программы. #8
не подскажите откуда задача?)
KnockKnock
 Аватар для KnockKnock
1 / 1 / 0
Регистрация: 04.11.2012
Сообщений: 11
04.11.2012, 23:41  [ТС]     Ошибка во время выполнения программы. #9
Почему, подскажу
http://informatics.mccme.ru/moodle/m...apterid=3019#1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2012, 00:30     Ошибка во время выполнения программы.
Еще ссылки по теме:

C++ Ошибка во время выполнения программы
C++ Во время выполнения программы результат не выводится. Где ошибка?
C++ Как уменьшить время выполнения программы?
Уменьшить время выполнения программы C++
Ошибка во время выполнения программы (размещения с повторениями) C++

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

Или воспользуйтесь поиском по форуму:
Venzo
 Аватар для Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
05.11.2012, 00:30     Ошибка во время выполнения программы. #10
KnockKnock, спасибо
Yandex
Объявления
05.11.2012, 00:30     Ошибка во время выполнения программы.
Ответ Создать тему
Опции темы

Текущее время: 00:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru