Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
KnockKnock
1 / 1 / 1
Регистрация: 04.11.2012
Сообщений: 11
#1

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

04.11.2012, 21:50. Просмотров 1410. Ответов 9
Метки нет (Все метки)

Здравствуйте, помогите, пожалуйста, разобраться. Пытаюсь сдать задачу, из 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;
}
Скорости гарантированно разные при делении, значит, на ноль не должно быть деления... В чём может быть проблема?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2012, 21:50
Ответы с готовыми решениями:

Ошибка во время выполнения программы
На сайте http://informatics.mccme.ru/mod/statements/view3.php?chapterid=212#1...

Ошибка во время выполнения программы
Здравствуйте, есть задача Дано два списка чисел, числа в первом списке...

Укажите где ошибка (ошибка во время выполнения программы)
Здравствуйте, помогите пожалуйста найти ошибки в коде которые возникаю при...

Ошибка во время выполнения программы (размещения с повторениями)
Давно я не заходил на прекрасный форум...Надеюсь, найдутся люди, которые смогут...

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

9
I.M.
567 / 550 / 47
Регистрация: 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
0
KnockKnock
1 / 1 / 1
Регистрация: 04.11.2012
Сообщений: 11
04.11.2012, 23:03  [ТС] #3
Это именно ошибка в процессе. На сайте отправляешь cpp-файл, он компилируется и прогоняется через некоторое количество тестов. В комментариях к заваленному тесту указано только, что прога вылетает...
Делал размеры массивов с запасом (каждый по 2 тысячи, например), не спасает положение.
0
I.M.
567 / 550 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
04.11.2012, 23:08 #4
А этот массив вообще нужен? Разве нельзя на ходу считать минимум?

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

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

Ошибка во время выполнения программы (структуры, массивы структур, указатели на структуру)
Работаю вот с таким кодом: #include&lt;iostream&gt; #include&lt;cstdio&gt;...

Время выполнения программы
Здравствуйте.Я до сих пор новичок в программировании,сразу скажу,и тонкостей не...

Определить время выполнения программы
В связи с доработкой алгоритма разных прог, иногда необходимо посмотреть на...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru