Олимпиада по программированию

Нашел одну олимпиаду по программированию, проводимую факультетом управления и прикладной математики МФТИ. Правда она вроде как для школьников, но и нам можно потренироваться. Олимпиада проводится до 15 23 января (продлена).

В контесте 20 задач. Олимпиада проводится по кировской системе (то есть баллы приносит даже решение, которое проходит только часть тестов) на Ejudge. Языки: C, C++, basic (компилятор yabasic), perl, pascal, Java, C#, ruby, python, fortran. На проверку отправляется исходный текст программы (не исполняемый и не файл проекта). Проверка автоматическая, так что никаких окон и приглашений к вводу делать не надо, а вот строгое соответствие формату данных, указанному в задаче, требуется. Ввод из стандартного потока ввода (с клавиатуры), вывод в стандартный поток вывода (на экран).

Задачи разного уровня от самых простых (из контрольных работ для начинающих и пробных туров олимпиад) до совсем сложных (уровня полуфинала чемпионата мира по програмимрованию ACM ICPC). Составители контеста — тренеры и часть состава команды mipt_waterogers, финалиста ACM ICPC 2010-2011 и 2011-2012 годов.

Вот собственно этот сайт, где проводится олимпиада: judge.mipt.ru. Будем участвовать?

Похожие записи для топика «Олимпиада по программированию»

Комментарии (15) свернуть  |  развернуть

  • avatar
  • belan
  • 07 января 2012, 20:07
0
— я так понимаю, что для школьников — это индивидуальное, а не командное соревнование
— я прошел регистрацию, посмотрю задачи…
0
— уже приступил к решению задач, пока попадаются совсем уж примитивные…
0
— да, сложные стали попадаться :)
0
они от простого к сложному отсортированы? :)
  • avatar
  • Chiliec
  • 07 января 2012, 23:22
0
А у меня вот уже на третьей задаче проблема =( Код спрятал под спойлер чтобы много места не занимать.
Найти наибольший общий делитель (НОД) и наименьшее общее кратное (НОК) двух введеных чисел.
{$APPTYPE CONSOLE}
uses
  SysUtils;
var
  a,b,t,n,i,j: integer;
begin
  readln(a,b);
  j:=1; n:=0;
  if a>b then //на всякий случай
  begin
    t:=a; a:=b; b:=t;
  end;
  for i:=1 to b do
    if (a mod i = 0) and (b mod i = 0) then n:=i;
  while (j mod a<>0) or (j mod b<>0) do j:=j+1;
  write(n,' ',j);
  readln;
end.

0
2 теста из 7 не проходит.
0
— к сожалению, совсем нет времени, но навскидку:
по условию задачи «Входные данные: Два положительных числа, не превосходящих 2^32-1», то есть максимум = 4294967295, а у вас integer…
  • avatar
  • Chiliec
  • 07 января 2012, 23:58
0
И у четвертой задачи тоже неполное решение. =(
Разложите данное число на простые сомножители.
{$APPTYPE CONSOLE}
uses
  SysUtils;
var
  n,i: integer;
begin
  readln(n);
  i:=2;
  while n>1 do
  begin
    if n mod i = 0 then
    begin
      write(i,' ');
      n:=n div i;
    end else inc(i);
  end;
  readln;
end.

1 из 3 не пройдено. Кстати, баллы за такое тоже дают, только при каждой последующей посылке вычитается количество попыток * количество баллов за один тест. Так что видимо мне уже смысла дорешивать эту задачу нет. Главное к этому не привыкнуть =)
0
— тут тоже integer`а не хватит так как: «Входные данные: Целое число 2 < N < 1300000.»
  • avatar
  • Chiliec
  • 08 января 2012, 01:05
0
В пятой задаче написано: «Задача принимается только на С или С++», что меня очень расстроило — я ни с C, ни с C++ дел никогда не имел :( Уже отправил гневное письмо судьям, что задача не соответствует заявленным языкам. Нашел похожий вопрос, на который они ответили:
Потому что в задаче требуется дописать фрагмент к существующей программе на С
Надеюсь на оффлайн олимпиадах нет таких подстав? ;)

А в шестой задаче у меня уже традиционно неполное решение. 3 из 15 не пройдено.
Определить, правильная ли скобочная структура.
{$APPTYPE CONSOLE}
uses
  SysUtils;
var
  s: string;
  i: integer;
  a,b: integer;
begin
  readln(s);
  a:=0;
  b:=0;
  for i:=1 to Length(s) do
  begin
    if a=0 then if s[i]=')' then a:=a+1000;
    if s[i]='(' then begin inc(a); dec(b); end;
    if s[i]=')' then begin dec(a); inc(b); end;
  end;
  if a=b then write('YES') else write('NO');
  readln;
end.

Подозреваю, что надпись в условии «Длина слова меньше 4001» стоит не просто так, а тип String автоматически не расширяется компилятором до WideString, а остается максимум в 255 символов.
0
— насколько я понимаю, в ФриПаскале нет типа ШирокаяСтрока, тут видимо задумка в задаче что нужно пойти через тип указатель на первый символ строки (type PChar =Char;) по аналогии с языком С, когда строка завершается нуль-символом и ограничена длиной = 65535.
0
— решил не откладывать и сразу проверить, оказалось ещё проще:
исправленный код программы
var
  c: char;
  s: array[0..4000] of char;
  i,n: integer;
  a,b: integer;
begin
  n:=0;
  read©;
  while c in ['(',')'] do
  begin
    s[n]:=c; inc(n); read©;
  end;
  if n>0
  then
  begin
    a:=0; b:=0;
    for i:=0 to n-1 do
    begin
      if a=0 then if s[i]=')' then a:=a+1000;
      if s[i]='(' then begin inc(a); dec(b); end;
      if s[i]=')' then begin dec(a); inc(b); end;
    end;
    if a=b then write('YES') else write('NO');
  end
  else write('NO');
end.
— я взял вашу прогу строку заменил на массив символов и все тесты программа прошла!
0
var
  c: char;
  s: array[0..4000] of char;
  i,n: integer;
  a,b: integer;
begin
  n:=0;
  read©;
  while c in ['(',')'] do
  begin
    s[n]:=c; inc(n); read©;
  end;
  if n>0
  then
  begin
    a:=0; b:=0;
    for i:=0 to n-1 do
    begin
      if a=0 then if s[i]=')' then a:=a+1000;
      if s[i]='(' then begin inc(a); dec(b); end;
      if s[i]=')' then begin dec(a); inc(b); end;
    end;
    if a=b then write('YES') else write('NO');
  end
  else write('NO');
end.

— что то я не разобрался со спойлерами, научите меня как текст скрывать
0
Спойлер — это обычный парный HTML-тег. Между ним нужно заключить весь текст, который нужно скрыть. В данном случае это весь код программы, обернутый тегом code. Например:
<spoiler title="Программа №2">
<code>{$APPTYPE CONSOLE}
uses
  SysUtils;
var
  a,b,c: integer;
begin
  readln(a,b,c);
  if (a+b>c) and (a<b+c) and (a+c>b) then write('YES') else write('NO');
  readln;
end.
</cоde>
</spoiler>
И вот как это будет выглядеть:
Программа №2
{$APPTYPE CONSOLE}
uses
  SysUtils;
var
  a,b,c: integer;
begin
  readln(a,b,c);
  if (a+b>c) and (a<b+c) and (a+c>b) then write('YES') else write('NO');
  readln;
end.

0
— ну я так и делал, а оно не хотело работать :(

Прокомментировать