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

acm.timus решение задачи номер 1915 - C++

Восстановить пароль Регистрация
 
лилиэн
6 / 6 / 0
Регистрация: 22.11.2012
Сообщений: 95
27.05.2013, 11:23     acm.timus решение задачи номер 1915 #1
в общем суть задачи такая.Нам дают число н до1,000,000
это число операций.
далее идут н операций если идет число положительное к примеру +7 +5 то мы его записываем в стек.
если идет 0 то мы удваиваем стек будет 7 5 7 5
если идет -1 то мы выводим последнее число в стеке
вырезано
вот сама задача
как я пыталась решить.Записала все операции в масив.Подсчитала количество -1(минусы) и считаю что надо вывести в результата программы не более (минусы) чисел из стека. и храню в масиве (результат) только (минусы) первых чисел
так как остальные типо не нужны. если я уже записала (минусы) чисел в стек то я просто делаю сдвиг стека(массива точнее) и записываю вновь прибывшее число на последнее место.если надо продублировать стек то есть уже все (минусы) мест заняты я ничего не делаю с стеком.Если не заняты то добавляю числа с начала(начинаю дублировани) до тех пор пока не будут заняты минус чисел.стоит добавить если было -1 то мы выводим число и удаляем его из стека
вот то что я написала.
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
#include<iostream.h>
#include<conio.h>
long Operations[1000000];
long Result[1000000];
long n;
void Sdvig(long minuses);
int main()
{
    cin>>n;
    long i=0;
    for(;i<n;i++)
    {
      long num;
      cin>>num;
      Operations[i]=num;
    }
    long minuses=0;
    for(i=0;i<n;i++)
     if (Operations[i]==-1)
         minuses++;
    i=0;
    long curr=0;
    long curr1=0;
    while(i++<n)
    {
                while(Operations[curr++]!=-1)
                {
                if(Operations[curr]>0)
                 if(curr1>minuses)
                 {
                                  Sdvig(minuses);
                                  curr1--;
                Result[curr1++]= Operations[curr];
                 }//if
                 if(!Operations[curr])
                  if(curr1<minuses)
                  {
                     long tmp=0;
                     while(curr1<minuses)
                     Result[curr++]=Result[tmp++];
                  } //if             
                                                       
                 }//while
                 if(Operations[curr]==-1)
                { cout<<Result[curr1];
                curr1--}
                                
    }
         
            
    getch();
    return 1;
}
void Sdvig(long minuses)
{
     for(;minuses>0;minuses--)
        Operations[minuses-1]=Operations[minuses];
}
есть идеи/предложения/замечания/здороваякритика???
буду рада всему чем поможете
спс.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2013, 11:23     acm.timus решение задачи номер 1915
Посмотрите здесь:

C++ Решение задачи
Задача 1001 acm.timus.ru C++
C++ Подкиньте несколько вариантов тестов для задачи с acm.timus.ru
Задача Timus C++
Подгонка решения задачи под тесты Timus Online Judge, С++ C++
Acm.timus Wrong answer C++
Acm.timus Wrong answer C++
C++ Acm.timus Runtime error (access violation)

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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