Инструкция по прохождению раунда

Ограничения на решения

Особенности запуска на определенных языках

Вопросы и ответы

Техническая поддержка

 

Инструкция по прохождению раунда

В соответствие с расписанием олимпиады Технокубок на платформе All Cups откроется возможность участия в раунде. Чтобы приступить к решению заданий, необходимо выполнить несколько шагов.

Шаг 1:

Открой личный кабинет участника на сайте олимпиады Технокубок в браузере Google Chrome или Safari. Организаторы не гарантируют, что пройти раунд с телефона/планшета или с другого браузера получится. Пожалуйста, заранее подготовь компьютер/ноутбук и установи нужный браузер, отключи VPN и блокировщик рекламы.

Нажми на кнопку «Перейти к раунду» возле нужного раунда.

Шаг 2:

После перехода на платформу AllCups тебе откроется список заданий. Они станут доступны в момент старта раунда.

Если время раунда наступило, а задания по-прежнему недоступны, убедись, что:

  • Ты зарегистрирован на сайте Технокубка

  • Ты заполнил все данные в анкете на сайте Технокубка, привязал свой аккаунт AllCups и зарегистрировался на раунды

  • Ты авторизован на AllCups под тем аккаунтом, который привязал к Технокубку

Проверить, что все шаги выполнены, можно с помощью инструкции по регистрации. Узнать какой аккаунт AllCups привязан к Технокубку можно в разделе «Анкета» – «3. AllCups».

Шаг 3:

Чтобы приступить к решению задачи, необходимо нажать на ее «карточку», или нажать на кнопку «К решению задач». После этого откроется рабочее пространство – интерфейс, в котором ты сможешь увидеть условия, формат входных и выходных данных, загрузить решения задач, познакомиться с актуальным рейтингом раунда.

Шаг 4:

Тебе необходимо (согласно условиям задачи) подготовить решение локально на компьютере и загрузить его в систему проверки.

Помимо условий самого задания к твоему решению предъявляются некоторые требования со стороны системы проверки:

1. Твоя программа получает стандартный потоковой ввод данных (stdin).

2. Твоя программа вернет ответы в стандартном потоковом выводе данных (stdout).

3. По результатам проверки ты можешь получить определенный код для своего решения:

# Correct answer (правильный ответ) - 'OK'

# Wrong answer (неправильный ответ) - 'WA'

# Presentation error (количество строк не совпадает с количеством строк в ответе) - 'PE'

# Runtime error (программа по какой-то причине не выдала ответ) - 'RE'

# Memory limit exceeded (превышено ограничение по памяти) - 'ML'

# Time limit exceeded (превышено время выполнения программы) - 'TL'

# Idleness limit exceeded (превышено время бездействия) - 'IL'

# Security violation (программа выполнила небезопасные операции) - 'SV'

# The program returned other non-zero code (программа не вернула 0) - 'CR'

# Server Error (ошибка в проверяющей системе, сообщите организатору) - 'SE'

Шаг 5:

Для перехода к следующей задаче нажми на ее буквенное обозначение. Чтобы открыть весь список задач, нажми «к раунду».

 

Ограничения на решения

Перечисленные ниже ограничения применяются ко всем задачам независимо от языка программирования по умолчанию. При этом в каждой задаче будут добавлены свои ограничения. Смотрите внимательно на условия задачи.

Настройки по умолчанию

{

"execution_time_s": 2,

"cpu_execution_time_s": 2,

"peak_ram_used_mb": 128,

"peak_swap_used_mb": 128,

"compare_mode": "case_insensitive"

}

, где:

execution_time_s: максимальное время выполнения в секундах;

cpu_execution_time_s: максимальное время потребления ресурса CPU в секундах;

peak_ram_used_mb: максимальное пиковое потребление оперативной памяти в мегабайтах;

peak_swap_used_mb: максимальное пиковое потребление свопа в мегабайтах;

case_insensitive: не учитывается регистр в ответе.

Особенности запуска на определенных языках

 

Go

Операционная система: Ubuntu 20.04

Версия языка Go: 1.14.6

Команды установки:

apt-get update -y && apt-get install --no-install-recommends -y -q curl build-essential ca-certificates git mercurial bzr

mkdir /goroot && curl <https://dl.google.com/go/go1.14.6.linux-amd64.tar.gz> | tar xvzf - -C /goroot --strip-components=1

mkdir /gopath

go install -buildmode=shared std

Компиляция:

go build -linkshared -o $COMPILED_FILE_PATH $SOLUTION_CODE_PATH/$SOLUTION_CODE_ENTRYPOINT 2>&1 >/dev/null

Запуск:

/lib64/ld-linux-x86-64.so.2 $SOLUTION_CODE_PATH/$SOLUTION_CODE_ENTRYPOINT

Обращаем внимание, что вместо переменных тебе необходимо вставить свои параметры для компиляции и запуска.

Пример программы:

package main

import (

"fmt"

)

func main() {

fmt.Scanf("%d", &str)

fmt.Printf("%d\\n", str)

}

 

Python

Операционная система: Ubuntu 20.04

Версия языка Python: 3.8

Команды установки:

apt-get update && \\

apt-get install -y python3.8 python3-pip

Запуск:

python3.8 -u $SOLUTION_CODE_PATH/$SOLUTION_CODE_ENTRYPOINT

Обращаем внимание, что вместо переменных тебе необходимо вставить свои параметры для компиляции и запуска.

Пример программы:

if __name__ == "__main__":

input_str = input()

print(input_str)

 

Java

Операционная система: Ubuntu 20.04

Версия языка Java: 11

Команды установки:

apt-get update -y && \\

apt-get install -y software-properties-common

add-apt-repository -y ppa:openjdk-r/ppa && \\

apt-get update -y && \\

apt-get install -y openjdk-11-jdk && \\

apt-get install -y maven

mkdir -p src/main/java && \\

mvn dependency:go-offline && \\

mvn package && \\

rm -rf compiled.jar target/classes/

Примечание: возможно потребуется объявление переменной:

MAVEN_OPTS="-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts -Djavax.net.ssl.trustStorePassword=changeit --add-opens java.base/java.lang=ALL-UNNAMED"

Компиляция:

mvn package -q -Dstyle.color=never

Запуск:

java -jar ${MOUNT_POINT}

Обращаем внимание, что вместо переменных тебе необходимо вставить свои параметры для компиляции и запуска.

Пример программы:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

System.out.print(in);

}

}

 

PHP

Операционная система: Ubuntu 20.04

Версия языка PHP: 7.4

Команды установки:

apt-get update -y && \\

apt-get install -y software-properties-common

DEBIAN_FRONTEND=noninteractive LC_ALL=en_US.UTF-8 add-apt-repository -y ppa:ondrej/php && \\

apt-get update && \\

apt-get -y install php7.4 php7.4-cli php7.4-common php7.4-json php7.4-mbstring

Запуск:

usr/bin/php $SOLUTION_CODE_PATH/$SOLUTION_CODE_ENTRYPOINT

Обращаем внимание, что вместо переменных тебе необходимо вставить свои параметры для компиляции и запуска.

Пример программы:

<?php

$var1 = readline();

echo $var1;

?>

 

C++

Операционная система: Ubuntu 20.04

Версия языка C++: 17

Команды установки:

apt-get update -y && \\

apt-get install -y software-properties-common

add-apt-repository ppa:ubuntu-toolchain-r/test -y && \\

apt-get update -y && \\

apt-get install -y g++-9 make cmake

Компиляция:

make 2>&1 >/dev/null

Запуск:

/lib64/ld-linux-x86-64.so.2 $MOUNT_POINT

Обращаем внимание, что вместо переменных тебе необходимо вставить свои параметры для компиляции и запуска.

Пример программы:

#include <iostream>

int main() {

int n;

std::cin >> n;

std::cout<<i;

return 0;

}

 

C#

Операционная система: Ubuntu 20.04

Версия языка C#: 6.12.0 Stable

Команды установки:

apt-get update -y && \\

apt-get install -y software-properties-common

apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF

echo "deb <http://download.mono-project.com/repo/ubuntu> stable-focal main" > /etc/apt/sources.list.d/mono-official-stable.list && \\

apt-get update && \\

apt-get install -y mono-complete && \\

rm -rf /var/lib/apt/lists/* /tmp/* && \\

export MONO_GC_PARAMS=max-heap-size=256M

Компиляция:

csc /unsafe $MOUNT_POINT -out:$COMPILED_FILE_PATH

Запуск:

mono $MOUNT_POINT > $RESULT_LOCATION 2>&1

Обращаем внимание, что вместо переменных тебе необходимо вставить свои параметры для компиляции и запуска.

Пример программы:

using System;

using System.Linq;

using System.IO;

using System.Text;

using System.Collections;

using System.Collections.Generic;

class Program

{

static void Main(string[] args)

{

string[] inputs;

inputs = Console.ReadLine().Split(' ');

int num = int.Parse(inputs[0]);

for (int i = 0; i < num; i++) {

inputs = Console.ReadLine().Split(' ');

var s = int.Parse(inputs[0]);

Console.WriteLine("{0}", Math.Pow(s, 5));

}

}

}

 

Node JS

Операционная система: Ubuntu 20.04

Версия языка Node JS: 1.14

Команды установки:

curl -sL <https://deb.nodesource.com/setup_14.x> | bash - && \\

DEBIAN_FRONTEND=noninteractive apt-get install -y nodejs

npm install prompt decimal.js

Запуск:

/usr/bin/node $SOLUTION_CODE_PATH/$SOLUTION_CODE_ENTRYPOINT

Обращаем внимание, что вместо переменных тебе необходимо вставить свои параметры для компиляции и запуска.

Пример программы:

var readline = require('readline');

var rl = readline.createInterface({

input: process.stdin,

output: process.stdout,

terminal: false

});

rl.on('line', function(line){

console.log(line);

})

Примечание: если возникает ошибка WA – это может быть Received empty answer и другие ошибки, которые Node пишет в консоль.

 

Вопросы и ответы

 

Что делать, если раунд начался, но у меня нет заданий?

Если время раунда наступило, а задания по-прежнему недоступны, убедись, что:

  • Ты зарегистрирован на сайте Технокубка

  • Ты заполнил все данные в анкете на сайте Технокубка, привязал свой аккаунт AllCups и зарегистрировался на раунды

  • Ты авторизован на AllCups под тем аккаунтом, который привязал к Технокубку

Проверить, что все шаги выполнены, можно с помощью инструкции по регистрации. Узнать какой аккаунт AllCups привязан к Технокубку можно в разделе «Анкета» – «3. AllCups».

 

Не могу войти на платформу All Cups, не подходит логин и пароль, что делать?

Проверь корректность вводимого логина и пароля. Если это не помогло, воспользуйся формой восстановления доступа к аккаунту.

 

Расписание первого отборочного раунда для меня неудобно. Можно ли его скорректировать?

Расписание раундов утверждено и едино для всех. В случае, если по какой-то причине нет возможности участвовать в одном отборочном раунде, можно попробовать свои силы в любом из двух других. Участие в отборочных раундах вне утвержденного расписания невозможно.

 

У меня отключили свет/интернет, что делать?

Раунд идет в строго отведенное время, если соединение с интернетом появится в этот период, можно продолжить загрузку решений до конца раунда. Если к этому моменту раунд завершится, ты сможешь принять участие в следующем раунде.

 

Я случайно закрыл окно браузера, что делать?

При закрытии страницы с раундом или браузера все ответы сохранятся автоматически. Ты можешь открыть раунд заново и продолжить его выполнение. При этом таймер будет работать все время, потраченное время не компенсируется.

 

Как я пойму, что ответ сохранился?

После загрузки решения в систему оно сохраняется автоматически.

 

У меня не прогружается задание, что делать?

Убедись, что используешь Google Chrome или Safari, у тебя отключен VPN и блокировщик рекламы. Обнови страницу.

 

Как я пойму, сколько времени у меня осталось?

Внутри рабочего пространства в верхнем правом углу будет таймер, отсчитывающий время до конца раунда.

 

Как сдавать решения на проверку?

На проверку отправляется исходный текст программы на одном из допустимых языков программирования. Обычно процесс проверки занимает не более 1-3 минут, однако иногда по техническим причинам может проходить и большее время. Все решения, посланные на проверку, рано или поздно будут проверены.

 

Почему программа не проходит тесты из условия, хотя на моем компьютере работает правильно?

Как правило, наиболее вероятные причины этого следующие:

  • Программа читает строку при помощи стандартных функций языка программирования, например, getline в C/C++, input в Python, при этом при сдаче программы желаемый тип концов строк установлен в CRLF. В этом случае программа при тестировании может считать лишний байт с кодом 0D, который в операционной системе Linux не будет восприниматься, как служебный символ конца строки. Пересдайте программу, не устанавливая параметр “желаемый тип концов строк” при отправке решения.

  • Наоборот, программа читает данные посимвольно, концы строк анализируются непосредственно в программе, сравнивая значения считанных символов с кодами 0D и 0A. При такой технологии чтения входных данных необходимо при сдаче программы указать желаемый тип концов строк CRLF.

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

  • Программа содержит ошибку, из-за которой программа может по-разному выполняться на разных компьютерах. Как правило, такой ошибкой является отсутствие инициализации переменной или выход за границы массива.

 

Почему мои баллы уменьшились после сдачи нового решения?

Вычисление балла проходит по следующей методике:

  • каждую минуту стоимость задачи падает на X/250 балла в минуту (где X – первоначальная стоимость задачи), например, задача первоначальной стоимости 500 баллов дешевеет со скоростью 2 балла в минуту;
  • балл участника за задачу равен текущей стоимости задачи в баллах за вычетом штрафа;
  • штраф определяется как количество решений этого участника по этой задаче, сделанных ранее, умноженное на 50 баллов;
  • балл участника за задачу не может быть меньше, чем 30% от изначальной стоимости задачи.

 

Что будет, если я начну выполнять задание за 5 минут до дедлайна, например 20 ноября в 16:00 (мск)?

У тебя будет только 5 минут на решение и запись ответа, поэтому не затягивай: заходи на платформу за 15-20 минут до назначенного времени раунда (в 13:45-13:50 (мск)).

 

Где и когда можно будет ознакомиться с техническими баллами?

Технический лидерборд будет опубликован сразу после завершения раунда по ссылке.

 

Техническая поддержка

Если у тебя возникла какая-то техническая сложность и ты не нашел решение своей проблемы на этой странице, напиши в наш чат ВКонтакте.

Обязательно укажи:

– логин (email) участника;

– описание проблемы;

– скриншоты / видеозапись проблемы (при необходимости).

Обрати внимание: техническая служба работает с 10:00 до 19:00 (по московскому времени). Если ты напишешь в другое время, мы ответим, но немного позже – в ближайшие рабочие часы.