Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/29: Рейтинг темы: голосов - 29, средняя оценка - 4.97
2 / 2 / 1
Регистрация: 16.09.2012
Сообщений: 18
1

Порядковая статистика

16.09.2012, 19:54. Показов 5332. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
http://acm.timus.ru/problem.aspx?space=1&num=1306
Подскажите, пожалуйста, ошибку в алгоритме, не могу найти.
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
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int partition(vector<int> &a,int l,int r){
    swap(a[l+rand()%(r-l+1)],a[r]);
    int mid = a[r];
    int i=l-1;
    for(int j=l;j<r;j++)
        if(a[j]<mid)
            swap(a[++i],a[j]);
    swap(a[i+1],a[r]);
    return i+1;
}
 
int get_st(vector<int> &a,int l,int r,int k){
    if(r==l) return a[r];
    int mid = partition(a,l,r);
    int c_el = mid -l+1;
    if(k==c_el)
        return a[mid];
    if(c_el>k)
        return get_st(a,l,mid-1,k);
    else
        return get_st(a,mid+1,r,k-c_el);
}
 
 
int main(){
    int n;
    cin>>n;
    vector<int> a(n);
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    double res;
    if((n&1)==1)
        res = get_st(a,0,n-1,(n+1)/2);
    else {
        res = (get_st(a,0,n-1,n/2)+get_st(a,0,n-1,n/2+1)+0.0)/2;
    }
    cout.precision(10);
    cout << fixed;
    cout<<res;
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.09.2012, 19:54
Ответы с готовыми решениями:

Статистика слова
Здравствуйте, help me please , есть программа которая выводит на экран статистику слова , но вывод...

Статистика слова
Нужно сделать статистику слова , ввожу Hello выводит H - 1 e - 1 l - 2 o - 1 HELP please O_o...

Математическая статистика
Число отечественных автомобилей превышает число иномарок в 1,6 раз. Отечественная машина ломается в...

K-порядковая статистика на отрезке
Добрый день всем! Пытаюсь разобраться в решении задачи о k-порядковой статистике на отрезке Я...

7
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
16.09.2012, 20:20 2
Цитата Сообщение от Domolaz Посмотреть сообщение
Подскажите, пожалуйста, ошибку в алгоритме, не могу найти.
Внимательнее читайте условие задачи. Цитата из условия:
Программа должна выдать значение медианы с точностью до одного десятичного знака.
А у Вас выводится 10 знаков после запятой.
0
2 / 2 / 1
Регистрация: 16.09.2012
Сообщений: 18
16.09.2012, 20:56  [ТС] 3
Вердикт не поменялся: TLE 3.
Проблема не в этом, а в чем-то другом, но непонятно в чем. Все мои тесты проходит.
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
16.09.2012, 21:59 4
Цитата Сообщение от Domolaz Посмотреть сообщение
Вердикт не поменялся: TLE 3.
Проблема не в этом, а в чем-то другом, но непонятно в чем. Все мои тесты проходит.
Вердикт TLE 3 говорит о том что 3-ий тест не проходит по времени. Алгоритм правильный у Вас, но медленный. Нужно что-то придумывать побыстрее.
0
2 / 2 / 1
Регистрация: 16.09.2012
Сообщений: 18
16.09.2012, 23:09  [ТС] 5
O(n) же.
Есть смысл построить кучу,но это уже nlogn, но мне нужно решить именно этим способом.
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
17.09.2012, 06:50 6
Цитата Сообщение от Domolaz Посмотреть сообщение
Есть смысл построить кучу,но это уже nlogn, но мне нужно решить именно этим способом.
если нужно решить именно этим способом, то попробуйте использовать не vector, а простой массив.

Добавлено через 18 минут
Цитата Сообщение от Domolaz Посмотреть сообщение
O(n) же.
у Вас не O(n)
0
2 / 2 / 1
Регистрация: 16.09.2012
Сообщений: 18
18.09.2012, 00:59  [ТС] 7
у Вас не O(n)
Грубо : n + n/2 + n/4 + n/8 .... + 1 < 2n => O(n). Но это если идеальное разбиение. При случайном аналогично, но доказательство другое.
Поменял вектор на массив - 7 MLE. Вывод - нужно другое решение. Например, куча.
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
18.09.2012, 06:12 8
Цитата Сообщение от Domolaz Посмотреть сообщение
Вывод - нужно другое решение. Например, куча.
Пробуйте кучу.

Не по теме:

я по-моему кучей решал

1
18.09.2012, 06:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2012, 06:12
Помогаю со студенческими работами здесь

K-ая порядковая статистика на отрезке за logN на запрос (NlogN препроцессинг)
Доброго времени суток! Возник такой вопрос - как узнавать k-ую порядковую статистику на отрезке за...

Счетчик или порядковая нумерация
Здравствуйте! Встала передо мной такая задача: в Акцесс нужно создать приложение, с помощью...

Статистика биржевой деятельности и статистика спроса
Очень поджимают сроки, сдать нужно ЗАВТРА! Сам сделал 12 задач, думал и с этими справлюсь, но, к...

Порядковая нумерация в Access с определенного числа. (по типу счетчика)
Есть ли какой ни будь способ стартануть БД с определенного числа. По типу (счетчик). Например мне...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru