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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Almaz17
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 3
#1

Лимит по времени - C++

15.12.2013, 19:01. Просмотров 231. Ответов 3
Метки нет (Все метки)

Как можно сделать еще быстрее?
Время работы 1.046 сек. Хотелось бы меньше 1.00 секунды

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
#include "stdafx.h"
#include <iostream>
#include <conio.h> 
 
using namespace std;
 
int main()
{
    int n, i, s, k, a[65535];
    cin >> n;
    for(i=0; i<n; i++)
    {
        cin >> a[i];
        for(s=1, k=0; s<a[i]; k++)
        {
            s=s+k;
        }
        s==a[i] ? a[i]=1 : a[i]=0;
    }
    for(i=0; i<n; i++)
    {
        cout << a[i] << ' ';
    }
    _getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2013, 19:01     Лимит по времени
Посмотрите здесь:

C++ Как увеличить лимит на количество символов в консоли
C++ Таймер времени
Разница во времени C++
C++ Лимит
C++ Вывод времени
C++ Лимит памяти для решений задач
C++ Разница во времени
C++ Просрочен лимит времени
C++ Лимит char в msvc
C++ Экономия по времени
Счастливый билет (Лимит Времени) C++
C++ Проверка на правильность времени, и показ времени

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.12.2013, 19:38     Лимит по времени #2
Цитата Сообщение от Almaz17 Посмотреть сообщение
Как можно сделать еще быстрее?
см комментарии:
Цитата Сообщение от Almaz17 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
for(i=0; i<n; i++)
 {
 cin >> a[i];
 for(s=1, k=0; s<a[i]; k++)// вот этот цикл повторяется n раз, а s вычисляется всегда по одному сценарию. Окончание подсчета s зависит только от значения a[i]. Не проще завести еще один массив, там один раз просчитать значение s для значений от 1 до максимального a[i], и тогда смысл этого цикла отпадет. Можно будет сразу из этого массива брать значение s для заданного a[i]
 {
 s=s+k;
 }
 s==a[i] ? a[i]=1 : a[i]=0;
 }

Не по теме:

на будущее: условие задачи не плохо бы писать

Almaz17
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 3
15.12.2013, 21:23  [ТС]     Лимит по времени #3
Цитата Сообщение от valeriikozlov Посмотреть сообщение
см комментарии:

Не по теме:

на будущее: условие задачи не плохо бы писать

http://acm.timus.ru/problem.aspx?space=1&num=1209 Здесь дана задача.

Нет ли другой альтернативы. А то сделать массив из 2^31 -1 элементов я не умею
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
16.12.2013, 06:36     Лимит по времени #4
Создаете массив, хватит размера 65536. В него записываете значения индексов где стоят единицы: 1 2 4 7 11 ...
Затем считав очередное Kj ищете его в этом массиве с помощью двоичного поиска. Нашли, выводите 1, не нашли, выводите 0.
Yandex
Объявления
16.12.2013, 06:36     Лимит по времени
Ответ Создать тему
Опции темы

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