Olá pessoal! Meu nome é Lida e tenho realizado competições de programação há 12 anos. (Olá, Lida!) Este ano, entrei para a equipe VKontakte e agora supervisiono a Copa VK. Por 5 temporadas, foi um campeonato único de programação esportiva. Mas chegou a hora de grandes mudanças.
Removemos a maioria das restrições, cancelamos o formato do par e adicionamos três novas direções. A VK Cup 2019 é uma competição online para programadores da Olimpíada, desenvolvedores de dispositivos móveis, designers e especialistas em aprendizado de máquina, com uma grande final offline em São Petersburgo.
Neste artigo, direi que criamos um novo e meus colegas farão recomendações para os participantes. As inscrições para a VK Cup estão abertas em vk.cc/cup até 4 de dezembro - resta apenas uma semana! Todos os detalhes sobre as faixas e etapas estão sob o corte.

VKontakte para as Olimpíadas
Muitas empresas de TI realizam suas competições - essa é uma maneira de falar sobre as tarefas interessantes que enfrentam. A equipe do VKontakte foi uma das primeiras em 2012 a organizar seus próprios torneios. Os próprios desenvolvedores os iniciaram - os vencedores das competições internacionais de programação sempre trabalharam na VK. Quatro campeões mundiais na equipe agora.
Os mecanismos que os desenvolvedores criam são a base do VKontakte. É neles que a eficiência é especialmente importante, a cada milissegundo. Como alcançar o desempenho máximo? Conheça profundamente os algoritmos e estruturas de dados e também se enquadre nos limites de memória fornecidos. São requisitos tão altos que são impostos ao código dos participantes da VK Cup.
Desde 2012, o formato mudou um pouco, mas a essência permaneceu a mesma: participantes de 14 a 23 anos competiram na programação da Olimpíada, sozinhos ou em equipes de duas pessoas. Se você chegou duas vezes à final, não poderá participar novamente. Está na hora de mudar.
Abaixo as restrições
A VK Cup 2019 será realizada em formato solo. Removemos a barra superior por idade e o limite do número de finais - assim, este ano, os melhores participantes dos últimos anos e especialistas experientes poderão voltar ao campeonato. Mas o mais importante - além da programação esportiva, será possível competir em aprendizado de máquina, desenvolvimento e design de dispositivos móveis. Você pode participar de várias faixas ao mesmo tempo - se, é claro, houver tempo suficiente.
Cada faixa será composta por três rodadas:
- A qualificação será realizada on-line de 6 a 16 de dezembro e estará aberta a todos. A próxima rodada será os 256 melhores participantes em cada faixa.
- Também realizaremos a fase de qualificação on-line - em fevereiro de 2020. Aqui, os participantes encontrarão tarefas mais complexas e menos tempo. 40 autores das decisões mais bem-sucedidas em cada faixa irão para as finais.
- A final será realizada em São Petersburgo em abril de 2020. No confronto de tempo integral, os participantes competirão pelo prêmio principal de cada faixa - 524.288 rublos (2 ^ 19).
Track Engine
Qualificação. Os participantes resolverão problemas na plataforma Codeforces em qualquer linguagem de programação conveniente. Você pode até resolver problemas com as mãos, desmontando cada teste individual.
Fase de qualificação. Será importante resolver cada problema o mais rápido possível, a fim de marcar mais pontos e receber um convite para as finais.
O final. Os participantes competirão de acordo com as regras padrão da Codeforces: poderão obter pontos adicionais se encontrarem erros nas decisões de outros participantes.
Dicas de Boris Minaev
Borya é o campeão mundial de programação do ICPC 2015, 2º lugar na VK Cup 2015, chefe da equipe de banco de dados do VKontakte.
- Resolva os problemas em ordem crescente de complexidade. Escolha aquele que passou mais participantes.
- Não faça ciclos em uma tarefa se ela não se render. Defina imediatamente um limite: "Se não avançar em uma solução em 15 minutos, passarei para a próxima".
- Teste a solução antes de enviar. Certifique-se de executá-lo em casos de limite. Antes disso, leia novamente a seção com restrições nos dados de entrada.
- Às vezes, a idéia de uma solução pode ser inventada com base nas restrições da condição. Por exemplo, você tem uma tarefa na qual n objetos são fornecidos. Se n <10, talvez na solução seja necessário iterar todas as permutações de objetos. Se n <20, escreva pesquisa recursiva em 2 ^ n. Se n <1000, crie uma programação dinâmica para n ^ 2. E se n for cerca de um milhão - provavelmente, você precisará pensar na direção de uma solução linear.
- Se você recebeu o WA, releia o código várias vezes e ainda não vê o erro, tente escrever uma solução mais simples. Em seguida, compare em pequenos testes se as soluções originais e novas sempre dão a mesma resposta. Se você estiver resolvendo um problema em uma árvore não ponderada, basta executar a solução novamente, mas selecione uma raiz diferente.
- Use ambientes de desenvolvimento como CLion ou IDEA. Eles podem encontrar erros padrão, como variáveis não inicializadas ou partes de código inacessíveis.
- Adicione mais asserções ao seu código. Encontrar o motivo da ER é muito mais fácil que o WA.
Track Mobile
Qualificação. Testaremos o conhecimento de algoritmos simples que geralmente são necessários para implementar telas padrão de aplicativos móveis, bem como o conhecimento teórico de nossa plataforma móvel. A próxima rodada será de 128 participantes de cada plataforma.
Fase de qualificação. Será necessário priorizar corretamente. Qual é o melhor - estar a tempo, tanto quanto possível, ou trabalhar com cada tarefa o mais cuidadosamente possível? As finais incluirão os 20 principais desenvolvedores.
O final. Cada participante terá que demonstrar suas habilidades com o produto: criar, implementar e enviar um novo projeto usando apenas as telas desenvolvidas na rodada anterior.
Dicas de Oleg Smirnov
Oleg lidera o Android Team VKontakte e compôs tarefas para a faixa de desenvolvimento móvel da VK Cup.
- Antes do início da competição, verifique se você tem um IDE (Android Studio) configurado, se os plugins necessários estão conectados, se o emulador está funcionando e se existe um dispositivo real para o desenvolvimento.
- Entenda o sistema de compilação Gradle e suas configurações.
- Leia os termos e condições e descubra o SDK mínimo que você precisará oferecer suporte. Não escreva código universal para todas as plataformas, resolva o problema com base nas condições definidas.
- Se não houver necessidade urgente, não use NDK no projeto. Quase qualquer tarefa pode ser resolvida usando o SDK.
- Preste atenção aos direitos de aplicação. Verifique se todas as solicitações de permissão foram feitas.
- Acompanhe o desempenho do aplicativo: sistema de arquivos, rede, animações suaves da interface do usuário.
- Defina o conjunto mínimo de bibliotecas para trabalhar. Use o tempo para resolver a tarefa, não para estudar as bibliotecas.
- Será útil examinar o trabalho do VK SDK.
Projeto da trilha
Qualificação. Garantiremos que os participantes não apenas desenvolvam elementos de design individuais, mas também notem erros.
Fase de qualificação. Oferecemos o desenvolvimento de interfaces de elementos individuais do VKontakte ou serviços independentes. Será importante encontrar um compromisso entre a escala da ideia e o tempo de desenvolvimento.
O final. Os participantes precisarão falar sobre sua ideia e apresentar o design.
Dicas de Alexei Mazelyuk
Lesha é designer sênior da VK e vencedora do concurso VK Designers em 2015 e 2017.
- Divida a tarefa em partes menores. Tente alocar tempo e priorizar para chegar a tempo. Se você conseguir fazer algo mais rápido do que o planejado, haverá tempo para recursos e melhorias.
- Defina o público e o contexto.
- Pense com antecedência nas ferramentas que deseja usar.
- Anote idéias. Escolha o melhor e continue trabalhando com eles. Não há tempo suficiente para tudo.
- Papel e lápis às vezes funcionam melhor que um editor de gráficos.
- Resolva o problema, não tire fotos bonitas. As tendências não devem ser ignoradas, mas tudo deve ser apropriado.
- Use sabiamente as conquistas dos colegas. Às vezes, é melhor levar algo pronto, em vez de reinventar a roda. Mas lembre-se de que novas soluções convenientes são avaliadas com mais qualidade que a próxima cópia.
- Envolver-se em detalhes, se você tiver tempo para isso.
- A apresentação é importante! Precisa vender a decisão ao júri. Use uma apresentação simples e clara.
- Não dobre com a quantidade de texto na apresentação, use o vídeo.
Track ML
Qualificação. Como resposta, você precisará fazer o download dos dados processados e cada decisão será avaliada usando uma métrica predefinida. Os dados da tarefa podem ser processados offline ou mesmo manualmente.
Fase de qualificação. O código da abordagem que os participantes desenvolverão será carregado no sistema de teste - todas as soluções serão testadas na mesma infraestrutura, em condições de recursos computacionais limitados.
O final. Os participantes resolverão uma tarefa prática difícil.
Dicas de Danila Savenkova
Danya entrou nos principais concorrentes da Mercedes no kaggle. Ele também é um programador sênior de VK.
- Para validação local, tente reproduzir o mesmo princípio de particionamento usado quando os organizadores do teste selecionaram o conjunto de testes (preste atenção ao horário, se houver, e ao ID). Se possível, use a validação cruzada. Esse método está praticamente pronto para avaliar a importância das alterações na métrica . Certifique-se de corrigir a semente ao quebrar o conjunto de dados.
- Treine e avalie modelos diferentes. Isso pode funcionar melhor que um modelo - lembre-se do teorema do limite central. XGBoost com diferentes lados também são modelos diferentes (o principal é lembrar de fazer a subamostra <1 e / ou colsample <1). XGBoost, CatBoost e LightGBM também são modelos diferentes neste contexto.
- Use sklearn.Pipeline. Quando model.fit inclui todo o pipeline, do pré-processamento de dados à obtenção de previsões, fica muito mais fácil viver e muito menos provável que cometa erros na validação local.
- Se você quiser postekat - preste atenção ao cross_val_predict, esta função ajudará bastante.
- Faça recursos. Empilhamento, mistura, ajuste de hiperparâmetros - quase todo mundo pode fazer isso. Os vencedores são aqueles que apresentaram os recursos mais bem-sucedidos. Bem, ou aqueles que encontraram um rosto. Ou aqueles que têm sorte. E mais frequentemente uma combinação desses fatores funciona;)
Se você ainda tiver dúvidas sobre a VK Cup, escreva para as mensagens privadas da VK VK: vk.com/cup . Lá você pode encontrar as regras e monitorar o andamento do campeonato.
Espero que vocês gostem da nova VK Cup e nos encontraremos com alguns leitores na final em São Petersburgo. Boa sorte a todos!