Обьясните как работает программа? Условие и код есть

Компьютеры программирование C++ cpp


Примечание:
Помогите пожалуйста. Я начинающий программист. Вот есть программа вот есть условие. Работает хорошо. Только что делает каждая процедура не понимаю Объясните пожалуйста поэтапно (по строкам, по предложениям, как удобно) как работает и что делает программа.
Заранее большое спасибо.

Взято отсюда http://acm.timus.ru/problem.aspx?space=1&num=1794.

1794. Шедевры мировой архитектуры
Ограничение времени: 1.0 секунды
Ограничение памяти: 64 МБ
Мария Ивановна оповестила всех учеников своего пятого класса, что через месяц она проведёт урок на тему «Шедевры мировой архитектуры». К этому уроку каждый из ребят должен был подготовить небольшой доклад об одном из знаменитых архитектурных сооружений. Как обычно, отличники подготовили свой доклад заранее, а двоечники начали готовиться к уроку только за несколько минут до него.
Начался урок. По сложившейся традиции проведения подобных уроков, дети садятся в круг и выступают один за другим по часовой стрелке. Отличники любят выступать одними из первых, в то время как двоечники хотят отвечать как можно позже, пытаясь доделать задание прямо во время урока.
Мария Ивановна спросила у каждого ученика, каким по счёту он хочет выступать. Теперь ей предстоит решить, кто должен выступить первым, чтобы как можно больше детей выступили по счёту ровно теми, какими они хотят.
Исходные данные
В первой строке записано целое число n — количество учеников в классе (2 ≤ n ≤ 105). Мария Ивановна занумеровала всех детей числами от 1 до n в порядке по часовой стрелке. Во второй строке через пробел записаны числа a1, …, an (1 ≤ ai ≤ n), где ai — номер, названный i-м учеником.
Результат
Выведите номер ученика, которого Мария Ивановна спросит первым. Если возможно несколько вариантов ответа, выведите любой.

Примеры
исходные данные

4
4 1 2 3


результат

2

исходные данные

3
1 1 1

результат

3


Код программы:

#include <iostream>

using namespace std;

long int N;

long int *_prav;

long int *_lev;

int main()

{

cin>>N;

_prav = new long int[2*N];

_lev = new long int[N];

for (long int q=0; q<N; q++) cin>>_prav[q];

for (long int q=0; q<N; q++)

{

_lev[q]=_prav[q];

_prav[q]-=q+1;

_prav[q+N]=_prav[q]-N;

}

long int _max=_prav[0];

long int _pos=1;

long int _count=1;

for (long int w=0; w<N; w++)

{

if (_prav[w]>-N)

{

_count=1;

for (long int q=w+1; q<2*N; q++)

{

if (_prav[q]==_prav[w])

{

_prav[q]=-N;

_count++;

}

}

_prav[w]=_count;

if (w==0) _max=_prav[w];

else if (_prav[w]>_max)

{

_max=_prav[w];

_pos=w-(_lev[w])+2;

}

}

}

if (_pos<=0) _pos+=N;

cout<<_pos<<endl;

getchar();getchar();

return 0;

}



Код взят отсюда http://acm.timus.ru/forum/thread.aspx?space=1&num=1794&id=25437&upd=634237343065011250
Ответы:
Сначала заполняются 2 массива.
А зачем начинающему программисту, который не знает языка программирование объяснять решение олимпиадной задачи ACM-типа? Да ещё и построчно объяснить...
Суть подобных задач - составить правильную математическую модель, а программирование - лишь средство реализации и проверки этой модели


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.