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

Определить длину ломаной по координатам - C++

Восстановить пароль Регистрация
 
nuts23
0 / 0 / 0
Регистрация: 22.06.2013
Сообщений: 30
22.06.2013, 17:20     Определить длину ломаной по координатам #1
Здравствуйте.
Проблема с решением задачи "Ловушки".
Далеко не все в Тентуре имеют право носить малиновые штаны, и конечно, не все владеют пепелацем с гравицапой, зато один предприимчивый чатланин поставил несколько ловушек, захватывающих отваливающиеся детали с пролетающих мимо инопланетных кораблей. Каждое утро он их обходит, в надежде, что рано или поздно из этих запчастей ему удастся собрать какое-нибудь транспортное средство. Путь свой чатланин планирует по карте, на которой аккуратно отмечены ловушки, отсчитывая начало координат от собственного дома. Начинается обход от дома, и в нем же и заканчивается.
Требуется определить, какое расстояние проходит чатланин за день.

Входные данные

В первой строке входного файла INPUT.TXT находится натуральное число N – количество ловушек, установленных чатланином (N<=10), далее следуют N строк формата «X Y», описывающих координаты ловушек в порядке их обхода (-10 <= X,Y <= 10; X,Y – целые числа).

Выходные данные

В выходной файл OUTPUT.TXT выведите общее расстояние, которое пройдет чатланин, обойдя все ловушки в приведенном порядке и вернувшись в начало координат от последней ловушки, с точностью до трех знаков после запятой.
Алгоритм ясен, ломаная образует многоугольник, начальная и конечная вершина которого - 0;0.
Моё решение:
C++ (Qt)
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
#include <stdio.h>
#include <math.h>
#include <cstdio>
#include <algorithm>
#include <cstring>
 
int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    int N;
    scanf("%d", &N);
    int X[11];
    int Y[11];
    double S;
    S = 0;
    X[0] = 0;
    Y[0] = 0;
    X[N+1] = 0;
    Y[N+1] = 0;
    double Z;
    double C;
    Z = C = 0;
    for (int i = 1; i <= N; ++i)
    {
        scanf("%d", &X[i]);
        scanf("%d", &Y[i]);
    }
    for (int i = 1; i <= N+1; ++i)
    {
 
        Z = (X[i]-X[i-1])*(X[i]-X[i-1]);
        C = (Y[i]-Y[i-1])*(Y[i]-Y[i-1]);
        S += sqrt(abs(Z) + abs(C));
    }
    printf("%.3lf", S);
    return 0;
}
Всё хорошо, но на 6 тесте валится с Time Limit'ом. В чём может быть проблема?

Добавлено через 5 минут
Тест Результат Время Память
1 Accepted 0,021 60 Кб
2 Accepted 0,009 60 Кб
3 Accepted 0,009 60 Кб
4 Accepted 0,009 60 Кб
5 Accepted 0,008 60 Кб
6 Time limit exceeded 1,349 1412 Кб
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2013, 17:20     Определить длину ломаной по координатам
Посмотрите здесь:

Определить расстояние от данной точки до ломаной C++
C++ По заданным координатам определить, где находится точка.
Определить длину и позицию слова, которое имеет наименьшую длину в строке C++
Определить вид треугольника по координатам вершин C++
Создать класс и вычислить длину ломаной линии C++
Напишите функцию Otrezok (x1, y1, x2, y2), которая находит длину отрезка AB по заданным координатам C++
C++ Написать функцию (или макроопределение), которая находит длину стороны по координатам его точек
Вычислить длину сторон четырехугольника по координатам вершин C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 2
22.06.2013, 17:37     Определить длину ломаной по координатам #2
Немного переделал. Сработало.
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
#include <stdio.h>
#include <math.h>
 
int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    int N;
    scanf("%d", &N);
    int X[11];
    int Y[11];
    double S;
    S = 0;
    X[0] = 0;
    Y[0] = 0;
    X[N+1] = 0;
    Y[N+1] = 0;
    double Z;
    double C;
    Z = C = 0;
    for (int i = 1; i <= N; ++i)
    {
        scanf("%d %d", &X[i], &Y[i]);
        Z = (X[i]-X[i-1])*(X[i]-X[i-1]);
        C = (Y[i]-Y[i-1])*(Y[i]-Y[i-1]);
        S += sqrt(Z + C);
    }
    Z = X[N]*X[N];
    C = Y[N]*Y[N];
    S += sqrt(Z + C);
    printf("%.3lf", S);
    return 0;
}
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
22.06.2013, 17:54     Определить длину ломаной по координатам #3
попробуйте это:
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
#include <iostream>
#include <cmath>
 
using namespace std;
typedef double ld;
typedef long long ll;
 
const ll maxi=12;
ll n,i;
ld x,y,pred_x,pred_y,sum=0.0;
 
void input()
{
    cin>>n;
}
 
void solve()
{
    pred_x=pred_y=0.0;
    for(i=0;i<n;++i)
    {
        cin>>x>>y;
        sum+=sqrt(pow(pred_x-x,2.0)+pow(pred_y-y,2.0));
        pred_x=x;pred_y=y;
    }
    sum+=sqrt(pow(pred_x,2.0)+pow(pred_y,2.0));
}
 
 
void output()
{
    cout<<fixed;
    cout<<showpoint;
    cout.precision(3);
    cout<<sum;
}
 
 
 
int main()
{
    ios_base::sync_with_stdio(0);
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    input();
    solve();
    output();
    return 0;
}
Yandex
Объявления
22.06.2013, 17:54     Определить длину ломаной по координатам
Ответ Создать тему
Опции темы

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