Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2016, 18:46   #1
Mad_Lord
Пользователь
 
Регистрация: 23.01.2016
Сообщений: 14
По умолчанию Вопрос по сервису Яндекс.Контест и 3 задачи из олимпиады

Здравствуйте! У меня недавно появилась информация, что на всероссийской олимпиаде школьников по информатике, на которую Я еду через насколько дней, будет использоваться сервис Яндекс.Контест . Я начал прорешивать пробный тур олимпиады на данном сервисе вчера вечером и у меня возникли некоторые трудности. Сейчас Я скопирую сюда исходники и вердикты сервиса по моим решениям. Пожалуйста, если кто-то может мне помочь понять мои ошибки, опишите что Я сделал не так, буду вам весьма признателен за это.


Вот условия задач https://yadi.sk/i/0iup98UFntcit
Если кто-нибудь хочет лично протестировать в Яндекс.Контесте , то вот вам ссылка https://contest.yandex.ru/contest/99...eport/1430350/


II задача

Мое решение

Код:
 Program sumsqr;
Var F:text;
    a, b:longint;
Begin
 Assign(f,'sumsqr.in');
 Reset(F);
 Readln (f, A, b);
 Close(f);
 Assign(f,'sumsqr.out');
 Rewrite(f);
 Write(f, (a*a+b*b) );
 Close(f);
End.
Вердикт сервиса

stdout:
50


stderr:
sample test 1 : ok

group 1 scored for 50 points
test 2: ok
test 3: ok
test 4: ok
test 5: ok
test 6: ok
test 7: ok
test 8: ok
test 9: ok
test 10: ok
test 11: ok

group 2 scored for 0 points
test 12: wrong-answer
test 13: wrong-answer
test 14: wrong-answer
test 15: wrong-answer
test 16: wrong-answer

total: 50 points



III задача

мое решение

Код:
Program alligator;
Label Q;
Var K:array of array of char;
    I, x, n, m, max:integer;
    Z:boolean;
    F:text;
Function ProwN(K:array of array of char; i, x:integer):boolean;
        Begin
         If i=0 then ProwN:=true;
         If (i>0) then If ((K[i-1])[x]='.') then ProwN:=ProwN(K, (i-1), x) else ProwN:=False;
        End;      
        
Function ProwS(K:array of array of char; i, x, n, m:integer):boolean;
        Begin
         If i=n-1 then ProwS:=true;
         If (i<n-1) then If ((K[i+1])[x]='.') then ProwS:=ProwS(K, (i+1), x, n, m) else ProwS:=False;
        End;
        
Function ProwW(K:array of array of char; i, x:integer):boolean;
        Begin
         If x=0 then ProwW:=true;
         If (x>0) then If ((K[i])[x-1]='.') then ProwW:=ProwW(K, i, (x-1)) else ProwW:=False;
        End;
              
Function ProwE(K:array of array of char; i, x, n, m:integer):boolean;
        Begin
         If x=m-1 then ProwE:=true;
         If (x<m-1) then If ((K[i])[x+1]='.') then ProwE:=ProwE(K, i, (x+1), n, m) else ProwE:=False;
        End;
        
Begin
 Assign(f, 'alligator.in');
 Reset (f);
 Readln(F, n,m);
 Setlength (K, n);
 For i:=1 to n do Setlength(K[i-1], m);
 For i:=1 to n do Begin For x:=1 to m do Read(F,(K[i-1])[x-1]); Readln(F); End;
 Close(f);
 
 max:=0;
 Q:For i:=0 to (n-1) do Begin For x:=0 to (m-1) do Begin           
                                          If (K[i])[x]='N' then Begin
                                                                z:=ProwN(K, i, x);
                                                                If z=true then Begin (K[i])[x]:='.'; max:=max+1; goto Q; End;
                                                                End;
                                                                
                                          If (K[i])[x]='S' then Begin
                                                                Z:=ProwS(K, i, x, n, m);
                                                                If z=true then Begin (K[i])[x]:='.'; max:=max+1; goto Q; End;
                                                                End;
                                                                
                                          If (K[i])[x]='E' then Begin
                                                                z:=ProwE(K, i, x, N, M);
                                                                If z=true then Begin (K[i])[x]:='.'; max:=max+1; goto Q; End;
                                                                End;
                                                                
                                          If (K[i])[x]='W' then Begin
                                                                Z:=ProwW(K, i, x);
                                                                If z=true then Begin (K[i])[x]:='.'; max:=max+1; goto Q; End;
                                                                End;
                                                    End;
                         
                         End;
Assign(f, 'alligator.out');
Rewrite(f);
Writeln(f, max);
Close(f);
End.
Вердикт сервиса

stdout:
30


stderr:
sample test 1 : ok
sample test 2 : ok
sample test 3 : ok

group 1 scored for 30 points
test 4: ok
test 5: ok
test 6: ok
test 7: ok
test 8: ok
test 9: ok
test 10: ok
test 11: ok
test 12: ok
test 13: ok
test 14: ok
test 15: ok
test 16: ok
test 17: ok
test 18: ok
test 19: ok
test 20: ok
test 21: ok
test 22: ok
test 23: ok
test 24: ok

group 2 scored for 0 points
test 25: TL
test 26: TL
test 27: TL
test 28: TL
test 29: TL
test 30: TL
test 31: TL
test 32: TL
test 33: TL
test 34: TL
test 35: TL
test 36: TL
test 37: TL
test 38: TL
test 39: TL

group 3 scored for 0 points
test 40: TL
test 41: TL
test 42: TL
test 43: TL
test 44: TL
test 45: TL
test 46: TL
test 47: TL
test 48: TL
test 49: TL
test 50: TL
test 51: TL
test 52: TL
test 53: TL
test 54: TL

total: 30 points



IV Задача

Мое решение

Код:
Program sweets;
Var  a,b,c ,n, x1, x2, x3, m, KolVo, max:longint;
     F:text;   
     S:string;
Begin
Assign(f,'sweets.in');
Reset(f);
Readln(f, n, a, b, c);
Close (F);
X1:=1;
X2:=1;
X3:=1;
M:=0;
max:=0;
KolVo:=0;
For x1:=1 to (n div a) do For x2:=1 to (n div b) do For x3:=1 to (n div c) do 
           Begin
            M:=A*x1+b*x2+c*x3;
            KolVo:=x1*x2*x3;
            If (KolVo>max) and (m<=n) then Begin max:=Kolvo; S:=a*x1+' '+b*x2+' '+c*x3; End;
           End;
Assign(f, 'sweets.out');
Rewrite(f);
Write (f, s);
Close (f);
End.
Вердикт сервиса

stdout:
38


stderr:
sample test 1 : ok
sample test 2 : ok

group 1 scored for 18 points

group 2 scored for 10 points

group 3 scored for 10 points

group 4 scored for 0 points

total: 38 points



Спасибо, что имели терпение добраться до конца. Мне очень интересно почему с некоторыми тестами программы справляются, а с некоторыми нет(особенно по 2 задаче, она слишком легкая, чтобы не работать, тут Я причины получения неправильного ответа вообще не понял). Пожалуйста, напишите свое мнение, сейчас Я очень рассчитываю на вашу помощь, если таковая возможна.

Последний раз редактировалось Mad_Lord; 28.01.2016 в 20:54.
Mad_Lord вне форума Ответить с цитированием
Старый 28.01.2016, 20:34   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

отмени свою поездку. откоси. если ты и правда так пишешь кодЪ – засмеют. или улыбальник разобьют. Ну читать же невозможно!!

вот так именовать переменные –
Код:
Var K:array of array of char;
I, x, n, m, max:integer;
Z:boolean;
– это галимое неуважение к людям, которых ты просишь твою писанину проанализировать!

Ну чо, я не прав, штоль?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 28.01.2016 в 20:40.
min@y™ вне форума Ответить с цитированием
Старый 28.01.2016, 20:41   #3
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Пущай едет - учится. Раз задаёт вопросы, значит не совсем потерян.

По поводу задач. Yandex предлагает регистрацию, а я не согласен. Вот и сижу без условий задач.

Вторая - скорее всего, переполнение разрядной сетки. Нужен более ёмкий тип qword или int64.
FPaul вне форума Ответить с цитированием
Старый 28.01.2016, 20:48   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

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

FPaul опередил пока на задачи смотрел
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 28.01.2016 в 20:50.
Аватар вне форума Ответить с цитированием
Старый 28.01.2016, 20:57   #5
Mad_Lord
Пользователь
 
Регистрация: 23.01.2016
Сообщений: 14
По умолчанию

Я изменил ссылку, теперь можно посмотреть без авторизации. За подсказку с типами данных больше, чем longint - спасибо, Я их просто не встречал раньше, теперь буду знать.
Mad_Lord вне форума Ответить с цитированием
Старый 28.01.2016, 21:23   #6
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Задача про крокодилов. Я бы, наверное, решал, сделав список с крокодилами (помимо игрового поля). И работал бы со списком, отмечая освободившиеся клетки на поле. Проверку сделал бы точно не рекурсивной.
Ну а по конструкциям - вместо if K[i, x]='W' и прочих if использовал бы case.
Цитата:
вот так именовать переменные –
– это галимое неуважение к людям, которых ты просишь твою писанину проанализировать!

Ну чо, я не прав, штоль?
100%. Но олимпийское программирование - далеко не образец в плане оформления. Вдобавок, мне встречались сайты, которые при прочих равных результатах, поднимали рейтинг тем, у кого исходный код короче (ф-фу, гадость).

Последний раз редактировалось FPaul; 28.01.2016 в 21:29.
FPaul вне форума Ответить с цитированием
Старый 28.01.2016, 21:36   #7
Mad_Lord
Пользователь
 
Регистрация: 23.01.2016
Сообщений: 14
По умолчанию

А можно тогда пару советов по оформлению, просто Я из периферии, учитель 1 всего на весь поселок, причем в олимпиадных задачах он мне вообще помочь не смог, тупо синтаксису в августе 15 года научил и по ЕГЭ чуток, а сам Я как-то даже не думал, что названия какую-то роль играют. До этого момента...
Как конкретно называть переменные, чтоб опытным программистам глаза не резало?

Последний раз редактировалось Mad_Lord; 28.01.2016 в 21:41.
Mad_Lord вне форума Ответить с цитированием
Старый 28.01.2016, 21:55   #8
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Есть такой программист и блоггер - gunsmoker. В его блоге есть несколько статей на тему оформления (не только отступы, но и общая стилистика) - к примеру http://www.gunsmoker.ru/2011/01/blog-post.html.

Перед экзаменом не ломайте себя изменениями (красивый но нерабочий код - ха-ха). Но ознакомьтесь и попытайтесь постепенно прийти к идеалу.

Ещё для тренировки, решайте задачки на форуме/форумах, на сайтах с judje (вот наподобие yandex) - timus.ru, acmp.ru может ещё каких-то.

На снисхождение не надейтесь, за плохие примеры от min@y™ точно достанется
FPaul вне форума Ответить с цитированием
Старый 28.01.2016, 22:32   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
учитель 1 всего на весь поселок
вау! у тебя даже учитель есть! прикинь, а у меня не было учителя. И ИНТЕРНЕТОВ - ТОЖЕ!
Цитата:
а сам Я как-то даже не думал, что названия какую-то роль играют
До этого момента...
Как конкретно называть переменные, чтоб опытным программистам глаза не резало?
у нас тут позавчера как раз тема была про оформление. Если интересно - поищи. А, во, нашёл.
Цитата:
На снисхождение не надейтесь, за плохие примеры от min@y™ точно достанется
Я не придираюсь, честно! Но бесит, когда видишь на заборе красивое граффити в виде популярного слова из 3 символов, написанного, блин, с грамматической ошибкой.

Надо уважать человеков, которым показываешь свою писанину, чтобы не удивляться, почему тебя посылают в сторону того самого забора, ну, с граффити...
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 29.01.2016, 10:11   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я полностью поддерживаю товарищей, высказавшихся за корректное правильное (по правилам, значит) оформление кода. Это нужно и важно!

но, справедливости ради хочу заметить,
что олимпиадное программирование - это вообще идиотская система, она к нормальному программированию отношения никакого не имеет.
Поэтому, реальные олимпиадники пишут так, как LeBron
(можете поискать его посты на форуме. Ну вот, например пост #4 в этой теме)
Поясню, почему так. Во-первых, для олимпиадников важна скорость. и написать переменную xy намного быстрее, чем писать, например SquareCurrentPositionXY,
а во-вторых, многие автоматические тесты (acmp.ru, например) считают число знаков в исходном коде, где их меньше, то тот код и лучше.
Вот, например, посмотрите, как тут народ (с моей подачи) развлекался в теме:
Оптимизация (сокращение) кода решения задачи #2 c acmp.ru - нахождение суммы целых чисел от 1 до N

Но я ещё раз повторю - такой олимпиадный код - по определению кривой и уродский, так в нормальной жизни оформлять код НЕЛЬЗЯ!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
timeout обращения к веб сервису Diego__ C/C++ Сетевое программирование 0 10.03.2013 19:06
Вопрос про яндекс маркет Leo(R) Помощь студентам 1 12.08.2011 22:03
Клиент к сервису smchat.ru dani92 Работа с сетью в Delphi 0 05.09.2009 09:49