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

Ускорение програмки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Подскажите, пожалуйста, где ошибка http://www.cyberforum.ru/cpp-beginners/thread1064782.html
Очень нужна помощь время поджимает. Задание: Вычислить произведение натуральных чисел, кратных 5, от і до n. Программа: #include<iostream.h> #include<stdio.h> int main() { int n, i, k=0; cout<<"Vvedite n:";
C++ Прокомментируйте код while(true){ cin>>temp; //temp переменная типа double if(!cin){ cin.clear(); if(cin.peek()=='|'){ while(cin.get() != '\n'); break; } else { http://www.cyberforum.ru/cpp-beginners/thread1064776.html
Обратная польская запись на С++ C++
Доброго времени суток =)Есть некоторые проблемы при реализации обратной польской записи, ошибок не выдает, не могу понять в чем дело. #include<stdafx.h> #include<stdio.h> #include<stdlib.h> #include<locale.h> struct st
Трабл линковки C++
Всем привет! Хочу запустить пример, который показывает приветствие. Код: #include <Windows.h> #include <tchar.h> int APIENTRY _tWinMain(HINSTANCE instancem, HINSTANCE, LPTSTR, int) { MessageBox(0,TEXT("Привет"), TEXT(""),0);
C++ Функция абстрактного базового класса http://www.cyberforum.ru/cpp-beginners/thread1064732.html
Есть абстрактный класс, пусть его зовут A, а у него есть 4 потомка, пусть их зовут: B, C, D и F. Функция должна возвращать экземпляры потомков. Можно ли декларировать её, как возвращающую экземпляр базового класса?
C++ Сравнение при наследовании Есть базовый класс, пусть его зовут А, а у него есть 4 потомка. Пусть их зовут: B, C, D и E. Базовый класса абстрактный,в нём есть виртуальные операторы == и !=, декларированные, как не имеющие реализаций (virtual operator == (A &a)=0;). Должен ли я в каждом потомке перегружать оба оператора на каждый возможный фактический класс правого операнда? Как вообще правильно декларировать операторы... подробнее

Показать сообщение отдельно
Doksim
57 / 57 / 8
Регистрация: 08.12.2013
Сообщений: 257

Ускорение програмки - C++

07.01.2014, 12:22. Просмотров 492. Ответов 13
Метки (Все метки)

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
struct Tree
{
       char s[ 54925 ];
       struct Tree *d;
};
 
 /*void show(struct Tree **tree) //Функция обхода
{
    if (*tree!=NULL) //Пока не встретится пустое звено
    {
       show(&((*tree)->d)); //Рекурсивная функция для вывода левого поддерева
       printf( "%s\n", (*tree)->s ); //Отображаем корень дерева
    }
}*/
void Insert( struct Tree **tree, char newstring[] )
{
     if( *tree == NULL )
     {
         *tree = (struct Tree *) malloc( sizeof( struct Tree ) );
         strcpy( (*tree)->s, newstring );
         (*tree)->d = NULL;
     }
     else
     {
         if ( (*tree)->d != NULL )Insert( &((*tree)->d), newstring );
         else 
         {
              (*tree)->d = (struct Tree *) malloc( sizeof( struct Tree ) );
              (*tree)->d->d = NULL; 
              strcpy( (*tree)->d->s, newstring );
         }
     }
}
 
void Delete( struct Tree **tree )
{
     if( (*tree)->d != NULL )
     {
         strcpy( (*tree)->s, (*tree)->d->s );
         Delete( &((*tree)->d) );
     }
}
 
int Prefix( struct Tree **tree, char prefstring[] )
{
    if( *tree != NULL )
    {
        int prefix = 1, len = strlen( prefstring );
        int i = 0;
        while( i < len )
        {
             if( (*tree)->s[ i ] != prefstring[ i ] )
             {
                 prefix = 0;
                 break;
             }
             i++;
        }
        return prefix + Prefix( &((*tree)->d), prefstring );
    }
    else return 0;
}
 
struct Tree *Prisystvie( struct Tree **tree, char string[] )
{
     if( *tree != NULL )
     {
         if( strcmp( (*tree)->s, string ) == 0 )
         return *tree;
         else return Prisystvie( &((*tree)->d), string );
     }
     else return NULL;
}
 
struct Tree *FindTop( struct Tree **tree )
{
       if( (*tree)->d == NULL )return *tree;
       else FindTop( &((*tree)->d) );
}
 
void FreeTree( struct Tree **tree )
{
     if( *tree != NULL )
     {
        FreeTree( &((*tree)->d) );
         
        free( *tree );
        *tree = NULL;
     }
}
void FreeTop( struct Tree **tree )
{
     if( (*tree)->d == NULL )
     {
        free( *tree );
        *tree = NULL;
     }
     else FreeTop( &((*tree)->d) );
}
 
int main()
{
    struct Tree *tree = NULL, *d = NULL;
    int n;
    scanf( "%d", &n );
    
    char cmd[ 6 ], string[ 1000000 ];
    
    int i = 0;
    while( i < n )
    {
         scanf( "%s %s", &cmd, &string);
         
         if( strcmp( cmd, "INSERT" ) == 0 )
         {
             if( !Prisystvie( &tree, string ) )
             Insert( &tree, string );
         }
         if( strcmp( cmd, "DELETE" ) == 0 )
         {
             if( d = Prisystvie( &tree, string ) )
             {
                 Delete( &d );
                 FreeTop( &tree );
             }
         }
         if( strcmp( cmd, "PREFIX" ) == 0 )
         {
             printf( "%d\n", Prefix( &tree, string ) );
         }
         i++;
    }
    
    return 0;   
}
код работает правильно, но превышает лимит по времени..как можно ускорить программу?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru