быть в состоянии решить наборы проблем Google Code Jam - PullRequest
3 голосов
/ 09 февраля 2010

Это не домашнее задание, а скорее мое намерение узнать, требуется ли это для изучения программирования. Я продолжаю входить в TopCoder, чтобы не участвовать, а получить общее представление о том, как решаются проблемы. Но, насколько мне известно, я не понимаю, в чем проблема и как перевести проблему в алгоритм, который может ее решить. Просто сейчас я смотрю на ACM ICPC 2010 World Finals, который проводится в Китае. Команды получили наборы задач, и одна из них такова:

Given at most 100 points on a plan with distinct x-coordinates,
   find the shortest cycle that passes through each point exactly once, 
   goes from the leftmost point always to the right until it reaches the 
   rightmost point, then goes always to the left until it gets back to the 
   leftmost point. Additionally, two points are given such that the the path
   from left to right contains the first point, and the path from right to 
   left contains the second point. This seems to be a very simple DP: after 
   processing the last k points, and with the first path ending in point a 
   and the second path ending in point b, what is the smallest total length
   to achieve that? This is O(n^2) states, transitions in O(n). We deal 
   with the two special points by forcing the first path to contain the first 
   one, and the second path contain the second one.

Теперь я понятия не имею, что я должен решить после прочтения поставленной задачи.

а есть еще один из Google Code Jam:

    Problem

        In a big, square room there are two point light sources: 
one is red and the other is green. There are also n circular pillars.

        Light travels in straight lines and is absorbed by walls and pillars. 
    The pillars therefore cast shadows: they do not let light through. 
    There are places in the room where no light reaches (black), where only 
    one of the two light sources reaches (red or green), and places where 
    both lights reach (yellow). Compute the total area of each of the four
     colors in the room. Do not include the area of the pillars.

        Input

            * One line containing the number of test cases, T.

        Each test case contains, in order:

            * One line containing the coordinates x, y of the red light source.
            * One line containing the coordinates x, y of the green light source.
            * One line containing the number of pillars n.
            * n lines describing the pillars. Each contains 3 numbers x, y, r. 
    The pillar is a disk with the center (x, y) and radius r.

        The room is the square described by 0 ≤ x, y ≤ 100. Pillars, room 
    walls and light sources are all disjoint, they do not overlap or touch. 

Output

For each test case, output:

Case #X:
black area
red area
green area
yellow area

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

Буду признателен, если кто-нибудь сможет мне помочь с интерпретацией проблемы с застреванием кода в Google, так как я хочу участвовать в этом году Code Jam, чтобы посмотреть, смогу ли я выполнить муравейник или нет.

Спасибо.

Ответы [ 7 ]

15 голосов
/ 10 мая 2010

Это большая ошибка - начинать с трудных проблем. Многие проблемы Мирового Финала слишком сложны для многих опытных программистов, поэтому неудивительно, что они слишком сложны для кого-то нового.

Как уже говорили другие, начните с гораздо более простых проблем. Я предполагаю, что вы знаете основы программирования и можете написать код хотя бы на одном языке программирования. Попробуйте проблемы из наборов задач Дивизиона 2 на TopCoder и региональных / квалификационных раундах ACM ICPC. Узнайте о простых проблемах на таких сайтах, как SPOJ, UVa и Project Euler (есть списки простых проблем, доступных в Интернете) и решите их. По мере того, как вы решаете, также читайте об основах алгоритмов и информатики. TopCoder - отличный ресурс, так как у него много учебников и статей, а также позволяет просматривать решения других людей.

ИМХО, чтобы стать лучшим программистом в целом, требуется много практики и обучения. Там нет ярлыка. Вы не можете предполагать, что вы какой-то герой-программист, который может просто вмешаться и решить все. Вы просто должны признать, что есть долгий путь, и начать с самого начала.

6 голосов
/ 09 февраля 2010

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

3 голосов
/ 06 мая 2010

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

Этот пример из Google Code Jam на самом деле довольно сложный и включает алгоритмы вычислительной геометрии. Как решить это подробно здесь: http://code.google.com/codejam/contest/dashboard?c=311101#s=a&a=5

3 голосов
/ 09 февраля 2010

Вы не можете начать изучать программирование, проводя соревнования. Если вы совсем не знакомы с программированием, то первые программы, которые вы напишете, - это такие вещи, как «hello world», fibonacci и ackermann. Начинать с таких вещей, как TopCoder, все равно, что учиться водить на автомобиле формулы 1. Это не работает таким образом.

2 голосов
/ 03 марта 2012

Я работал над проблемами Google Code Jam в течение прошлой недели или около того, и я думаю, что они - отличные упражнения. Ключ в том, чтобы найти проблемы, которые немного расширяют ваши способности, но не заставляют вас отказаться от них. Проблемы с Google Code Jam широко варьируются по сложности!

Рекомендую начинать с тех, которые в разделе "С чего мне начать":

http://code.google.com/codejam/contests.html

А затем изучите все проблемы первого раунда соревнований. Если это слишком просто, переходите к другим раундам.

Что мне действительно нравится в кодовом джеме, так это то, что вы можете использовать практически любой язык, на который хотите, и можете получать отзывы от их автоматизированного судьи. Если у вас закончились проблемы с Code Jam, проверьте другие сайты, упомянутые другими.

1 голос
/ 21 января 2014

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

1 голос
/ 22 апреля 2010

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

  1. Ваше глубокое понимание языка, который вы используете, и
  2. ваша умственная гибкость с языком.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...