Что нового

Открытый чемпионат по программированию VK Cup 2012

Fever

Скриптер
Сообщения
308
Репутация
112
Чемпионат
Чемпионат VK Cup — это открытый чемпионат по программированию, проводимый компанией ВКонтакте, проектом Codeforces и Саратовским государственным университетом. Финал чемпионата пройдет в июле в Санкт-Петербурге. Лучшие 50 участников по результатам третьего отборочного раунда будут приглашены на финал соревнования. Расходы по проезду и проживанию берут на себя организаторы чемпионата.

Участники
Вы молоды и любите решать задачи по программированию? Этот чемпионат для вас! Участником чемпионата может стать любой желающий, кто удовлетворяет следующим требованиям:

  • возраст не менее 14 и не более 23 полных лет на момент регистрации;
  • не является сотрудником компании ВКонтакте и/или членом оргкомитета или жюри чемпионата;
  • не является дисквалифицированным членом сообщества Codeforces.

Таким образом, чемпионат преимущественно ориентирован на школьников старших классов и студентов.

Соревнование индивидуальное, участие в какой-либо коллективной форме не допускается.

Как участвовать
Будьте готовы решать интересные алгоритмические задачи. Вам будут предложены следующие языки программирования:

  • С/С++
  • Delphi/Pascal
  • Java
  • С#
  • Python
  • Ruby
  • PHP
  • OCaml
  • Haskell
  • Perl
  • Scala

Так как современные языки очень сильно различаются по производительности, жюри не гарантирует существование решения на всех языках из списка.

Структура чемпионата
vkcup2012-scheme-ru.png


VK Cup 2012 Квалификационный раунд 1
Первый квалификационный раунд проводился 4 марта. На решение задач были даны сутки. С ними (и решением некоторых) можете ознакомится ниже. Схема проверки была приблизительно такой: у Вас была возможность посылать решение на одном из представленных языков в неограниченном количестве, но с определенным штрафом за неправильный вариант. Решение проходит 2 проверки:
- претест (вовремя соревнования)
- тест (после соревнования, до оглашения результатов)
если в первом случае решение можно перепослать (за что, естественно, у вас снимут баллы), то во втором случае сделать уже ничего нельзя.

A. Следующий раунд
Условие
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Classes;

var i,k,n,h:integer;
    sSLT, sSLP: TStringList;
    sT, sP: string;
begin
  readln(sP);

  sSLP:=TStringList.Create;
  sSLP.Delimiter:=' ';
  sSLP.DelimitedText:=sP;
  n:=strtoint(sSLP[0]);
  k:=strtoint(sSLP[1]);

  if (1<=k) and (k<=n) and (n<=50) then begin
    readln(sT);
    h:=k-1;

    sSLT:=TStringList.Create;
    sSLT.Delimiter:=' ';
    sSLT.DelimitedText:=sT;

    if strtoint(sSLT[h]) > 0 then begin
      for i:=0 to sSLT.Count-1 do
        if (sSLT[i]=sSLT[h]) and (i>h) then k:=k+1;
    end else begin
      k:=0;
      for i:=h downto 0 do
        if (strtoint(sSLT[i])>0) then k:=k+1;
    end;

    writeln(k);
    readln(n);
  end;
end.

B. Такси
Условие
Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Classes,
  Math;

var s:string;
    k,i,j,h:integer;
    sSL:TStringList;
begin
  readln(k);
  readln(s);
  if (1<=k) and (k<=IntPower(10, 5)) then begin
    sSL:=TStringList.Create;
    sSL.Delimiter:=' ';
    sSL.DelimitedText:=s;
    h:=0;

    for i:=0 to sSL.Count-1 do begin
      for j:=0 to sSL.Count-1 do begin
        if (strtoint(sSL[i])+strtoint(sSL[j]) <= 4) and (i<>j) then begin
          sSL[i]:=floattostr(strtoint(sSL[i])+strtoint(sSL[j]));
          sSL[j]:='0';
        end;
      end;
      if strtoint(sSL[i]) = 4 then begin
        sSL[i]:='0';
        h:=h+1;
      end;
    end;
  end;
  for i:=0 to sSL.Count-1 do begin
    if strtoint(sSL[i]) > 0 then h:=h+1;
  end;
  writeln(h);
  readln(k);
end.

C. Команды cd и pwd
Условие
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Classes;

var n,i,j,x:integer;
    sPath,s:string;
    sSL1,sSL2,sSL3:TStringList;
    a: array[1..50] of string;
begin
  readln(n);

  if (1<=n) and (n<=50) then begin
    for i:=1 to n do
      readln(a[i]);

    sPath:='/';
    for i:=1 to n do begin
      sSL1:=TStringList.Create;
      sSL1.Delimiter:=' ';
      sSL1.DelimitedText:=a[i];

      if sSL1[0] = 'cd' then begin
        s:=sSL1[1];

        if s[1] = '/' then begin
          sSL2:=TStringList.Create;
          sSL2.Delimiter:='/';
          sSL2.DelimitedText:=s;

          sPath:='/';
          for j:=0 to sSL2.Count-1 do begin
            if sSL2[j] <> '..' then begin
              if sPath = '/' then sPath:=sPath+sSL2[j]
              else sPath:=sPath+'/'+sSL2[j];
            end else begin {}
              if (sPath <> '/') then begin
                sSL3:=TStringList.Create;
                sSL3.Delimiter:='/';
                sSL3.DelimitedText:=sPath;
                if (length(sPath)-length(sSL3[sSL3.Count-1])-1) > 0 then
                  sPath:=Copy(sPath, 1, length(sPath)-length(sSL3[sSL3.Count-1])-1)
                else
                  sPath:=Copy(sPath, 1, length(sPath)-length(sSL3[sSL3.Count-1]));
                sSL3.Free;
              end else
                sPath:='/';
            end;            {}
          end;

          sSL2.Free
        end else begin
          sSL2:=TStringList.Create;
          sSL2.Delimiter:='/';
          sSL2.DelimitedText:=s;

          for j:=0 to sSL2.Count-1 do begin
            if (sSL2[j] = '..') then begin
              if (sPath <> '/') then begin
                sSL3:=TStringList.Create;
                sSL3.Delimiter:='/';
                sSL3.DelimitedText:=sPath;
                if (length(sPath)-length(sSL3[sSL3.Count-1])-1) > 0 then
                  sPath:=Copy(sPath, 1, length(sPath)-length(sSL3[sSL3.Count-1])-1)
                else
                  sPath:=Copy(sPath, 1, length(sPath)-length(sSL3[sSL3.Count-1]));
                sSL3.Free;
              end else
                sPath:='/';
            end else
              if sPath = '/' then
                sPath:=sPath+sSL2[j]
              else
                sPath:=sPath+'/'+sSL2[j];
          end;
          sSL2.Free;
        end;
      end;
      if sSL1[0] = 'pwd' then begin
        if sPath[length(sPath)] = '/' then
          writeln(sPath)
        else
          writeln(sPath+'/');
      end;
      sSL1.Free;
    end;
  end;
  readln(x);
end.

D. Ледяные скульптуры
Условие
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Classes;

var n,i,j,k:integer;
    max:integer;
    s:string;
    sSL1:TStringList;
    a:array[1..20000] of integer;
begin
  readln(n);
  if (3<=n) and (n<=20000) then begin
    readln(s);
    sSL1:=TStringList.Create;
    sSL1.Delimiter:=' ';
    sSL1.DelimitedText:=s;
    max:=0;

    if (n=3) or (n=4) then begin
      for i:=0 to sSL1.Count-1 do
        max:=max+strtoint(sSL1[i]);
    end else begin
      k:=1;
      for i:=1 to n do begin
        j:=1;
        while (j<=n) do begin
          a[k]:=a[k]+strtoint(sSL1[j-1]);
          j:=j+i;
        end;
        k:=k+1;
      end;

      i:=2;
      while (i<=n) do begin
        j:=i;
        while (j<=n) do begin
          a[k]:=a[k]+strtoint(sSL1[j-1]);
          j:=j+i;
        end;
        k:=k+1;
        i:=i+1;
      end;

      max:=a[1];
      for i:=1 to 20000 do begin
        if a[i] > max then
          max:=a[i];
      end;
    end;
    writeln(max);
  end;
end.

E. Телефонные разговоры
Условие

Желающие принять участие могут пройти Квалификационный раунд 2 9 марта.

Источник: http://codeforces.ru/vkcup2012
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
В "Такси" ты не учитваешь варианты когда в одну машину садятся больше двух групп.

В "Ледяных фигурах" ты нигде не проверяешь что получится правильный многоугольник (что остаток от деления n на i равен нулю).
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Какие-то бредовые задачи... Не люблю непрактичные задачи.

:smile:
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Уже можно посмотреть решения людей.
Вот. Коротко и ясно:
Код:
var n,i,k:byte;
    a:array[1..50] of byte;
begin
  readln(n,k);
  for i:=1 to n do read(a[i]); i:=1;
  while (a[i]>=a[k]) and (a[i]>0) and (i<=n) do inc(i);
  write(i-1);
end.

Я правда 1 квалификацию профукал... Пришел за 2 часа до окончания с кучей собственных проблем, которые не давали сосредоточиться. Да еще надо было спать ложиться ибо рано вставать надо было... В общем не прокатило.
Да и тут нереально четсно выиграть - у прошареных 2 аккаунта - 1 для теста, второй для результатов - а это однако не честно... Но и 180 000 рублей на дороге не валяются...



Добавлено:
Сообщение автоматически объединено:

Кстати вот мое решение на C#. Нашел ошибку только после просмотра - какие результаты вбивают в программу :(
Код:
using System;

namespace NextRound
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] read = Console.ReadLine().Split(' ');
            string[] balls = Console.ReadLine().Split(' ');

            int maxball = Convert.ToInt32(balls[Convert.ToInt32(read[1]) - 1]);
            int proshli = 0;
            for (int i = 0; i < Convert.ToInt32(read[0]); i++)
            {
                if ((Convert.ToInt32(balls[i]) >= maxball) && (maxball > 0))
                    proshli++;
            }
            Console.Write(proshli);
        }
    }
}
 
Автор
F

Fever

Скриптер
Сообщения
308
Репутация
112
C2H5OH [?]
В "Такси" ты не учитваешь варианты когда в одну машину садятся больше двух групп.В "Ледяных фигурах" ты нигде не проверяешь что получится правильный многоугольник (что остаток от деления n на i равен нулю).

спасибо, что указали на ошибки, сам не смог найти :reading_book:
 
Верх