Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
 Аватар для vik23
5 / 1 / 1
Регистрация: 07.12.2010
Сообщений: 44

Олимпиадная задача

11.12.2013, 12:07. Показов 1345. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Условие: http://i.imm.io/1m1cH.jpeg
Примеры вывода: http://i.imm.io/1m1cL.png
2 часа писал программу.. она даже работала! Но загрузив её на сайт, она выполнялась 1200 мс..
По условию ограничение выполнения 1 сек. Не приняли. на компе 3.2ггц 1200мс!!!!1 Такое возможно?
Код ведь простой. компилятор FP. ЧЯДНТ?
Мб. если писать её на другом языке, то прошла бы? В связи с этим си шарп решил изучать..

Или это и есть быдлокодинг?
Pascal
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
var   rez:string;
  b,s,c,gb,gs,gc,kb,ks,kc,zenb,zens,zenc,flag,i: byte;
  rub,gamb: longint;
        label m1,m2,m3;
BEGIN
 readln(rez);
 read(kb); read(ks); readln(kc); read(zenb); read(zens); readln(zenc);
 read(rub);
 gb:=0;  gs:=0; gc:=0; gamb:=0; flag:=0;
 while i<>1 do begin;
       if rez[i]='b' then gb:=gb+1 else
       if rez[i]='s' then gs:=gs+1 else
       if rez[i]='c' then gc:=gc+1 else i:=1;
        end;
 
 while flag=0 do
 
 if kb>=gb then begin;
     m1:
     kb:=kb-gb;
     if ks>=gs then begin;
         m2:
         ks:=ks-gs;
         if kc>=gc then begin;
             m3:
             kc:=kc-gc;
             gamb:=gamb+1;
            end
             else if rub>=zenc then begin;
                  rub:=rub-(gc-kc)*zenc;
                  kc:=gc;
                  goto m3;
 
                    end
                             else flag:=1;
        end
          else if rub>=zens then begin;
              rub:=rub-(gs-ks)*zens;
              ks:=0;
              goto m2;
 
               end
                      else flag:=1;
    end
      else if rub>=zenb then begin;
          rub:=rub-(gb-kb)*zenb;
          kb:=0;
          goto m1;
           end
            else flag:=1;
 write(gamb);
END.
зы. не помню, компилируется ли _этот_ код на виндовом tp или fp.. конечный вариант не сохранил, кажется
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.12.2013, 12:07
Ответы с готовыми решениями:

Олимпиадная задача
На вход в файле INPUT.TXT подаётся две строчки: N - количество томов(максимум 32) и (от 1 до N)порядок томов книг Нужно найти и вывести...

Выборы. Олимпиадная задача
На выборах в Государственную думу в избирательные бюллетени внесено N партий. Электронный сканер для считывания информации с бюллетеней...

Олимпиадная задача с кубиками
Не могли бы вы мне помочь? Юный математике Матвей интересуется теорией вероятностей, и по этой причине у него всегда есть с собой...

14
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
11.12.2013, 14:11
Цитата Сообщение от vik23 Посмотреть сообщение
Такое возможно?
возможно. У Вас неоптимальный алгоритм решения. Вот пример:
Пусть денег 10^12, бутерброд состоит из одного хлеба, который стоит всего один рубль. Циклов будет 10^12.
0
 Аватар для vik23
5 / 1 / 1
Регистрация: 07.12.2010
Сообщений: 44
11.12.2013, 14:21  [ТС]
valeriikozlov, так дело в том, что и на первых двух примерах не проходило по времени. Шагов там не так уж и много.
А на 10^12 я даже типа данных в Паскале не знаю, поэтому не надеялся все тесты пройти.
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
11.12.2013, 14:33
Цитата Сообщение от vik23 Посмотреть сообщение
так дело в том, что и на первых двух примерах не проходило по времени. Шагов там не так уж и много.
ну если вы уверены, что там первые тесты как на картинке (хотя бывает не всегда так), то возможно дело вот в чем:
часто бывает, что считывать входные данные и записывать результат нужно из файла (в файл). Почитайте на сайте, где сдаете как правильно сдавать задачу.
1
 Аватар для vik23
5 / 1 / 1
Регистрация: 07.12.2010
Сообщений: 44
11.12.2013, 14:39  [ТС]
Цитата Сообщение от valeriikozlov Посмотреть сообщение
где сдаете как правильно сдавать задачу.
Все верно. Остальные задачи сдавал, проходили. А тут именно TimeLimit.
TL - ваша программа превысила ограничение
по времени на тесте и была прервана;
Пообщаюсь с организаторами. Обидно, мог бы место повыше занять с этой задачей.
0
Платежеспособный зверь
 Аватар для кот Бегемот
8964 / 4387 / 1654
Регистрация: 28.10.2009
Сообщений: 11,645
11.12.2013, 19:23
Кто вас на олимпиаду пустил? У вас begin везде, где открывается, там и закрывается, например:
Цитата Сообщение от vik23 Посмотреть сообщение
while i<>1 do begin;
Что вы перебираете в этом цикле:
Pascal
1
2
3
4
5
while i<>1 do begin;
       if rez[i]='b' then gb:=gb+1 else
       if rez[i]='s' then gs:=gs+1 else
       if rez[i]='c' then gc:=gc+1 else i:=1;
        end;
если вы не проходите по строке?
Дурдом, а не программа. Она не по времени не прошла, а по степени идиотизма.
2
 Аватар для vik23
5 / 1 / 1
Регистрация: 07.12.2010
Сообщений: 44
12.12.2013, 01:42  [ТС]
кот Бегемот, у меня изначально там был for.
Pascal
1
2
3
4
5
for i:=1 to 100 do begin;
       if rez[i]='b' then gb:=gb+1 else
       if rez[i]='s' then gs:=gs+1 else
       if rez[i]='c' then gc:=gc+1 else i:=100;
        end;
писал в TP, а тесты были на FP, не понимал почему не компилировалось у них.
fp не допускал вмешательство в счетчик => ошибка в компиляции.
наспех влепил while, да забыл inc(i); зацикливание.. вот в чем причина.


Цитата Сообщение от кот Бегемот Посмотреть сообщение
begin везде, где открывается, там и закрывается
действительно., здесь они лишние.

Цитата Сообщение от кот Бегемот Посмотреть сообщение
Кто вас на олимпиаду пустил?
Сам пришел. 26 место в области
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
12.12.2013, 12:01
Pascal
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
var
  s: string;
  n,p,c: array[1..3] of integer;
  i: integer;
  m,g: int64;
begin
  ReadLn(s); ReadLn(n[1],n[2],n[3]); ReadLn(p[1],p[2],p[3]); ReadLn(m);
  { считаем затраты ингридиентов на бутерброд }
  g:=0; FillChar(c,sizeof(c),#0);
  for i:=1 to Length(s) do
    case s[i] of
    'B': inc(c[1]);
    'S': inc(c[2]);
    'C': inc(c[3]);
    end;
  { используем запасы, пока позволяют деньги }
  while n[1]+n[2]+n[3]>0 do begin
    for i:=1 to 3 do begin
      dec(n[i],c[i]);
      if n[i]<0 then begin inc(m,n[i]*p[i]); n[i]:=0; end;
    end;
    if m>=0 then inc(g) else break;
  end;
  { докупаем остальное }
  if m>0 then inc(g,m div (p[1]*c[1]+p[2]*c[2]+p[3]*c[3]));
  WriteLn(g);
end.
Прогоны:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
time echo -e "BBBSSC\n 6 4 1\n 1 2 3\n 4" | ./t7
2
 
real    0m0.005s
user    0m0.001s
sys     0m0.002s
 
time echo -e "BBC\n 1 10 1\n 1 10 1\n 21" | ./t7
7
 
real    0m0.004s
user    0m0.001s
sys     0m0.003s
 
time echo -e "BSC\n 1 1 1\n 1 1 3\n 1000000000000" | ./t7
200000000001
 
real    0m0.006s
user    0m0.002s
sys     0m0.002s
1
Почетный модератор
 Аватар для ildwine
6201 / 2955 / 1300
Регистрация: 04.03.2013
Сообщений: 5,796
Записей в блоге: 1
12.12.2013, 12:22
Цитата Сообщение от vik23 Посмотреть сообщение
Пообщаюсь с организаторами. Обидно, мог бы место повыше занять с этой задачей.
Уже одно то, что используется оператор goto и метки... Так писать программы нельзя!
0
 Аватар для APALoff
1648 / 1077 / 1081
Регистрация: 03.07.2013
Сообщений: 4,507
12.12.2013, 12:24
Цитата Сообщение от ildwine Посмотреть сообщение
Так писать программы нельзя!
Не совсем точно... Можно (т.к. сама возможность этого изначально заложена), но настоятельно не рекомендуется.
0
12.12.2013, 12:28

Не по теме:

APALoff, единственное оправданное применение goto в языке высокого уровня - выход сразу из нескольких вложенных циклов. И то, можно обойтись.

0
12.12.2013, 12:54

Не по теме:

Цитата Сообщение от ildwine Посмотреть сообщение

Не по теме:

APALoff, единственное оправданное применение goto в языке высокого уровня - выход сразу из нескольких вложенных циклов. И то, можно обойтись.

Я не про оправданность говорил, а про саму возможность, т.е. категорическое "нельзя" не относится к возможностям самого языка программирования, а относится к этическим/эстетическим/моральным принципам построения программного кода.

0
Платежеспособный зверь
 Аватар для кот Бегемот
8964 / 4387 / 1654
Регистрация: 28.10.2009
Сообщений: 11,645
12.12.2013, 15:40
Цитата Сообщение от APALoff Посмотреть сообщение

Не по теме:


Я не про оправданность говорил, а про саму возможность, т.е. категорическое "нельзя" не относится к возможностям самого языка программирования, а относится к этическим/эстетическим/моральным принципам построения программного кода.

Дейкстра, когда хаял Бейсик по сравнению с Паскалем, в качестве основного аргумента приводил именно использование GOTO в Бейсике и структурирование программы в Паскале. Использование GOTO и меток как раз и нивелирует это превосходство Паскаля и возвращает его к Бейсику.

Цитата Сообщение от vik23 Посмотреть сообщение
Сам пришел. 26 место в области
Это ни о чём не говорит. На прошлогодней олимпиаде в **** области из 58 участников половина уехали с нулём. Тоже могут похвастаться дележом 30 места.
0
 Аватар для vik23
5 / 1 / 1
Регистрация: 07.12.2010
Сообщений: 44
12.12.2013, 21:23  [ТС]
кот Бегемот,
offtopic
Цитата Сообщение от кот Бегемот Посмотреть сообщение
из 58 участников половина уехали с нулём.
Хм. У нас участников было больше двух сотен, а мест 157.
Что писать-то
0
12.12.2013, 23:13

Не по теме:

Так это муниципальный этап, там задачи детские

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.12.2013, 23:13
Помогаю со студенческими работами здесь

Олимпиадная задача Pascal
Пришел недавно с олимпиады . Все решил , последняя задача никак не дается . Кто нибудь может знает как решит ? Сегодня Али в местном...

Олимпиадная задача. Лестница из кубиков.
1) Мальчик Петя строит из кубиков лестницу. Лестница представляет собой несколько стоящихся рядом башенок из кубиков, каждая из которых...

Олимпиадная задача, бред, но красиво
Кролик открыл в лесу кафе, в котором Сова выпекает пирожные. Осел решил угостить друзей и заказал множество пирожных разных видов в разных...

Олимпиадная задача про конфеты
У Пети Костылькова день рождения и он принес конфеты, чтобы угостить одноклассников и, конечно же, свою любимую учительницу Снежану...

задача на двумерные массивы (олимпиадная)
«Умножение методом решетки». В IX веке нашей эры арабский математик Мухаммед ибн Мусса ал-Хорезми придумал способ умножения натуральных...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru