ЕГЭ прошлое и настоящее

Введение


Здравствуйте! Я — студент математического факультета, учусь на 3 курсе и так уж вышло, что я увлекся решением задач ЕГЭ части C как по математике, так и по информатике.

К сожалению, на ЕГЭ по информатике обращают меньше всего внимания. Вы спросите, почему я так решил? Да хотя бы, потому что на протяжении 7 лет задания по математике меняются из года в год, причем коренным образом, а по информатике как были, так и остались. Каждый год я видел одни и те же задания. И знаете что?! Это действительно надоело, потому что ЕГЭ по информатике превращается в своего рода – «набей руку на решение однотипных задач и получи свою пятерку».

В 2012 году на ЕГЭ по информатике, наконец, обратили внимание. И оно поменялось (причем все три части A, B, C).

Все кому интересно посмотреть на задачи, которые были на протяжении 7 лет и на то, как они были изменены в 2012 году, прошу подкат. Мы будем рассматривать C часть, так как, именно, она представляет больший интерес. Хотя А и B части по информатики тоже очень серьезно изменились, их мы рассмотрим в следующий раз, если это Вам будет интересно.

Задачи, которые были до 2012 года


С1
Задача С1 является классической задачей о попадании точки в некоторую область, которая задана графически. Помню, как с этими задачками нас запаривали на первом курсе…
Собственно условие задачи:

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

Программа на языке Pascal
var x, y: real;
begin
  readln(x,y);
    if y<=x then
      if y<=-x then
        if y>=x*x-2 then
           write('принадлежит')
        else
           write('не принадлежит')
end.

image

Требуется выполнить последовательно следующее:
1) Приведите пример таких чисел x, y, при которых программа неправильно решает поставленную задачу.
2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой правильный способ доработки исходной программы.)


Давайте выполним каждый из пунктов.

1) Для решения пункта 1 необходимо понять, что делает исходная программа. После небольших рассуждений можно сделать вывод, что она проверяет, попадает ли точка в область выделенную красным цветом. То есть любая точка, принадлежащая серой области, и не принадлежащая красной области является ответом на поставленный вопрос. Например, x=2, y=2 или x=0.5, y=0.5 или x=-0.5, y=0.5 (таких точек куча выбирайте любую).
image

2) Поскольку на ЕГЭ самым ходовым языком программирования является Pascal (Delphi), то напишем на нем правильную программу, которая определяет принадлежность введенной точки заданной области. Для этого разобьем область на два множества точек относительно оси ординат (то есть x<= 0, x>=0)
var x, y: real;
begin
  readln(x,y);
    if (y>=x*x-2) and (y<=x) and (x>=0) or (x<=0) and (y<=-x) and (y>=x*x-2) then
     write('принадлежит')
      else 
    write('не принадлежит');   
end.

Первое условие в if — e означает принадлежность сиреневой области, а второе — голубой, и мы берем их объединение.

image

Ну вот и все с задачей С1 мы разобрались. Легко, не правда ли?!

C2
Задача С2 — достаточно простая задача на обработку данных в массиве, что-то типа: посчитать среднее арифметическое четных элементов массива.
Рассмотрим конкретный пример:

Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от 0 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет подсчитать и вывести среднее арифметическое элементов массива, имеющих нечетное значение. Гарантируется, что в исходном массиве хотя бы один элемент имеет нечетное значение.

Решение:

Const N=30;
Var a: array [1..N] of integer;
       i, x, y: integer;
       s: real;
begin
   for i:=1 to N do 
      readln(a[i]);
x:=0; y:=0;
for i:=1 to N do
    if (a[i] mod 2=1) then 
      begin
        x:=x+a[i];
        y:=y+1;
      end;
  s:=x/y;
writeln(s);
end.

В этой задаче, думаю даже комментарии излишне, так как она является очень простой. Хотя были модификации этой задачи посложнее, например: … подсчитать и вывести среднее арифметическое элементов массива, сумма цифр, которых является нечетным числом. Задача простая, но скажите на порядок сложнее.

С3

image

Пожалуй, это самая пресловутая задача. Она надоела всем: от школьников до учителей. Мой преподаватель, который проверяет ЕГЭ, больше всего жалуется именно на эту задачу: «Ну, какой идиот придумал эту задачу? Надоело…».

Если судить объективно, то эта задача ничего общего с информатикой вообще не имеет. Почему она сидит в С части на протяжении 7 лет? Непонятно!

Собственно, задача представляет собой игру, в которой играют двое игроков, делая ходы. Рассмотрим одну из этих злополучных задач и метод ее решения. Кстати, именно эта задача принципиально поменялась в 2012 году.
Условие задачи звучит так:

Два игрока играют в следующую игру. Перед ними лежат две кучки камней, в первой из которых 3, а во второй 4 камня. У каждого игрока неограниченно много камней. Игроки ходят по очереди. Ход состоит в том, что игрок или удваивает число камней в какой-то кучке или добавляет 4 камня в какую-то кучку. Игрок, после хода, которого общее число камней в двух кучках становится больше 25, проигрывает. Кто выигрывает при безошибочной игре обоих игроков – игрок, делающий первый ход, или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ обоснуйте.

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

image

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

Ну, вот и все. С С3 мы тоже разобрались! Как она Вам? По мне — так очень скучная. Если пару раз прорешать задачи такого типа, то они не представляют никакой трудности!

C4
Сказать честно задача С4 мне не нравится. Одно ее условие на полстраницы чего стоит. К сожалению, эта задача проверяет не алгоритмические знания ученика, а больше технические.
Условие задачи звучит так:

На вход программе подаются сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы. В первой строке сообщается количество учеников N, которое не меньше 10, но не превосходит 100, каждая из следующих N строк имеет следующий формат: <Фамилия> <Имя> <оценки>, где <Фамилия> – строка, состоящая не более чем из 20 символов, <Имя> – строка, состоящая не более чем из 15 символов, <оценки> – через пробел три целых числа, соответствующие оценкам по пятибалльной системе. <Фамилия> и <Имя>, а также <Имя> и <оценки> разделены одним пробелом. Пример входной строки:
Иванов Петр 4 5 4
Требуется написать программу, которая будет выводить на экран фамилии и имена трех лучших по среднему баллу учеников. Если среди остальных есть ученики, набравшие тот же средний балл, что и один из трех лучших, то следует вывести и их фамилии и имена. Требуемые имена и фамилии можно выводить в произвольном порядке.

Поскольку самому решать эту задачу, ну, очень не охота, то приведу пример из кодификатора ЕГЭ (образец для проверки).

Решение
var p:array[1..100] of record
                         name: string;
                         sum: integer;
                       end;
    c:char;
    i,j,N,s1,s2,s3,m:integer;
begin
  readln(N);
  for i:=1 to N do
  begin
    p[i].name:='';
    repeat
      read(c);
      p[i].name:=p[i].name+c
    until c=' '; {считана фамилия}
    repeat
      read(c);
      p[i].name:=p[i].name+c
    until c=' '; {считано имя}
    p[i].sum:=0;
    for j:=1 to 3 do
    begin
      read(m);
      p[i].sum:=p[i].sum+m
    end; {подсчитана сумма баллов}
    readln;
  end;
s1:=0; s2:=0; s3:=0;
  for i:=1 to N do
  begin
    if p[i].sum>s1 then
      begin
        s3:=s2; s2:=s1;
        s1:=p[i].sum
      end else
    if p[i].sum>s2 then
      begin
        s3:=s2; s2:=p[i].sum
      end else
    if p[i].sum>s3 then s3:=p[i].sum;
  end;
  for i:=1 to N do
    if p[i].sum>=s3 then writeln(p[i].name);
end.


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

Задачи в 2012 году


С1
Кажется, составители ЕГЭ решили, что задача о попадании точки в некоторую область является слишком сложной(как по мне — это вовсе не так). Задача С1 была буквально упрощена. Теперь вместо системы координат рассматривается числовая прямая, а вместо области — объединение отрезков. Необходимо по введенному число определить принадлежность отрезкам.

image
Не понятно для чего надо было упрощать, эту и без того, простую задачу!?

C2
Эта задача осталась без изменения. Необходимо произвести обработку элементов массива.

C3
А вот эта задача изменилась коренным образом.
Условие звучит так:

У исполнителя Утроитель две команды, которым присвоены номера:
1. прибавь 1,
2. умножь на 3.
Первая из них увеличивает число на экране на 1, вторая – утраивает его. Программа для Утроителя – это последовательность команд.
Сколько есть программ, которые число 1 преобразуют в число 29? Ответ обоснуйте.

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

Приведу решение из кодификатора:
Обозначим R(n) – количество программ, которые преобразуют число 1 в число n. Обозначим t(n) наибольшее кратное трем, не превосходящее n. Обе команды исполнителя увеличивают исходное число, поэтому общее количество команд в программе не может превосходить 28.
Верны следующие соотношения:
1. Если n не делится на 3, то тогда R(n) = R(t(n)), так как существует единственный способ получения n из t(n) – прибавлением единиц.
2. Пусть n делится на 3.
Тогда R(n) = R(n/3)+R(n-1)= R(n/3)+R(n-3) (если n>3).
При n=3 R(n) = 2 (два способа: прибавлением двух единиц или
однократным умножением на 3).
Поэтому достаточно постепенно вычислить значения R(n) для всех
чисел, кратных трем и не превосходящих 29: сначала вычисляем R(1), затем R(3), R(6) и т.д.
Имеем:
R(2)=1
R(3) = 2 = R(4)=R(5)
R(6) = R(2)+R(3) =1+2 = 3 = R(7)=R(8)
R(9) = R(3)+R(6) =2+3 =5 = R(10)=R(11)
R(12) = R(4)+R(9) = 2+5 = 7 = R(13)=R(14)
R(15) = R(5)+R(12) =2+7 =9 = R(16)=R(17)
R(18) = R(6)+R(15) = 3+9 = 12 = R(19)=R(20)
R(21) = R(7)+R(18) = 3+12 = 15 = R(22)=R(23)
R(24) = R(8)+R(21) = 3+ 15 = 18 = R(25)=R(26)
R(27) = R(9)+R(24) = 5 + 18 = 23 = R(28)=R(29)
Ответ: 23

По мне эта задача куда интереснее, чем игра. Она требует от ученика, хотя бы, представления о понятии динамического программирования.
Что Вы думаете?

C4
Задача С4 в этом году тоже немного улучшилась. Теперь не надо считывать эти фамилии и имена как в прошлой задаче С4. Собственно условие звучит так:

На ускорителе для большого числа частиц производится замеры скорости каждой из них. Чтобы в документации качественно отличать одну серию эксперимента от другой, каждую серию решили характеризовать числом, равным максимальному произведению из всех произведений пар скоростей различных частиц.
Вам предлагается написать эффективную, в том числе по используемой памяти, программу, которая будет обрабатывать результаты эксперимента, находя искомую величину. В нашей модели скорость частицы – это величина, которая может принимать как положительные, так и отрицательные значения. Следует учитывать, что частиц, скорость которых измерена, может быть очень много, но не может быть меньше двух.
На вход программе в первой строчке подается количество частиц N. В каждой из следующих N строк записано одно целое число со знаком, по абсолютной величине не превышающее 10000.
Пример входных данных:
5
123
1000
-12
10
1000
Программа должна вывести одно целое число, равное максимальному произведению из всех произведений пар скоростей различных частиц.
Пример выходных данных для приведенного выше примера входных данных:
1000000


В данной задаче поставлено достаточно много условий. Во-первых, требуется написать как можно эффективнее программу по времени и по памяти. Во-вторых, говорится, что данных может быть очень много. Это тонкий намек на то, что если мы решим записать входные данные в массив, то мы уже не получим эффективное решение. Наивный способ решения данной задачи: записать все в массив и двойным циклом пробежаться по элементам массива, найдя искомое число. Очевидно, такой алгоритм требует O(n*n) времени и O(n) памяти. Это плохо.… За такое решение можно получить максимум 2 балла из 4.

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

Думаю, эта задача куда симпатичнее задач С4 предыдущих годов.

Заключение


Ну, вот мы и познакомились с задачками ЕГЭ части C по информатике. Радует, что все задачи являются доступными для школьника, который готовился к экзамену. Также радует, что писать программу можно на любом языке программирования (встречались Python, PHP, Basic лишь бы проверяющий знал этот язык).

Какие задачи Вам понравились больше старые или новые?
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 125

    0
    С3 в этом году многие решали древом. За такое решение давали максимум баллов, хотя нам учитель говорил что так делать нельзя.
      0
      А за С4, с занесением данных в массив моему знакомому дали 3 балла из 4.
        0
        Добрый проверяющий попался. Хотя так и надо. В условиях ЕГЭ написать и с массивом сложно…
          +1
          Так не надо. Если человеку надо много баллов по информатике, значит скорее всего они идет на программиста, а он должен уметь рационально решать задачу.
            +1
            Я бы сказал так. Он должен 1) уметь решать, 2) причем рационально. Цифры тут — приоритеты. Конечно, могу получить камень в свой огород, но в большинстве своем чаще нужно рабочее решение в адекватные сроки, чем идеальное.
            Еще раз. Я не говорю, что решение массивом — это прям отлично. Но как по мне — гораздо лучше решить массивом, чем вообще не решить. Потому разрыв между не решившими и решившими массивом должен быть больше, нежели между решившими массивом и решившими рационально.
        0
        Мне мой преподаватель сказал, что обязательно должна быть это рекуррентная формула. Хотя она тоже давала максимальные баллы за решение с деревом.
        +11
        По ЕГЭ получают высокие баллы в основном те, кто заучивает типовые решения задач. Умение думать оно, к сожалению, совсем не проверяет. Части А и Б не представляют никакой трудности, потому что все знают ход решения, но мало кто понимает суть задач. За две недели до экзаменов в школе провели диагностическую работу в формате ЕГЭ с не совсем типовыми задачами — результаты были провальные, многие не преодолели порог. На реальном же ЕГЭ задачи отличались от заученных лишь цифрами, результат — почти у всех больше 80. Итог — отрыв у соображающих людей от тупых зубрил очень мал.
        Что же касается обновленного задания С3 — большинство знают лишь алгоритм решения, но не понимают что они делают, потому что этому никто и не учил. На реальном ЕГЭ поменяли условие «Обозначим R(n) – количество программ, которые преобразуют число 1 в число n.» на «Обозначим R(n) – количество программ, которые преобразуют число 5 в число n.» и срезали кучу народа, что очень правильно, но дискредитирует ЕГЭ как форму экзамена: изучение превратилось в заучивание.
          +7
          Ой, да бросьте вы.
          Сколько говорят «заучивают, заучивают», а больше 80 мало кто набирает в среднем.

          Просто если человек идиот — ему никакие зубрёжки решений не помогут, сколько раз наблюдал.
            +1
            Если человек не идиот, да еще и руку набил набирает 90+ баллов, ну мой выпуск :)
              +1
              А вы попробуйте сами набрать. Я в своё время набрал не то 82, не то 84. Хотя знал на порядки больше, чем надо на ЕГЭ. Это раз. Два — зубрёжкой нельзя выучить всё, где-нибудь да налажаешь. Тут всё же нет готовых ответов.

              И три: видимо, идиотам зубрёжки помогают. Ибо экзамен мягко говоря для идиотов. Точнее не так: человеку, изучавшему информатику и программирование, нужен экзамен раз в 10 сложнее. Проблема в том, что в России практически никто реально не изучает ни первое, ни второе. Но зачем тогда делать экзамен-профанацию по предметам, которые всё равно в школе адекватно не проходят?

              Кстати, задачи класса С3 прекрасно себе живут в олимпиадах для 5-6 классов по математике. Не сказал бы, что они не имеют ничего общего с программированием, скорее наоборот — логика есть основа алгоритмики. Это остальные цешки ничего общего с программированием не имеют — тупой кодинг. Но ё ж моё: 11 класс должен быть чуть умнее, чем 6.
                0
                Набрал уже, как бы =)

                Ну тем не менее, никто из моих знакомых идиотов много не набрал.
                Было, что явные будущие программисты набирали недостаточно(я и от себя большего ожидал) — но это от излишней самоуверенности, и потому что забывают, к примеру, что там ещё системы счисления есть и т.п.
                  0
                  Тут намедни спорили в одном топике следует ли считать слово «деньги (в рублях)» как натуральное число или как вещественное… К согласию не пришли.
                    +2
                    Экономисты тоже не смогли решить этот вопрос и ввели новый тип — Currency :)
                      0
                      Как «натуральное» точно считать нельзя. В лучшем случае, как целое. Но еще лучше — как fixed point с 10 цифрами после запятой.
                        0
                        Зато Эванс договорился об этом. Если деньги рассматриваются как купюры для банка, то это сущность (можно посчитать как натуральное число), так как их номер имеет значение, а если деньги как некая сумма для оплаты, то это value object (вещественное число), так как номера не важны, а важно значение. Вывод: всё зависит от контекста
                      +1
                      Моя дочь в этом году набрала 91. При том, что программировать она почти не умеет, да и в зубрежке замечена не была. Все исключительно за счет логики и здравого смысла.
                      0
                      Имхо, 80 должно быть для того, кто понял, осознал, но, увы, на гения не претнедует.
                        0
                        Я вмешаюсь, тк тема мне близка.
                        В математике и физике я ноль. Так получилось.
                        В 2010 году я сдавал ЕГЭ по физике и математике, я не знал нечего.(школу закончил в 2008)
                        Я получил проходной бал, и в последствии попал в технический ВУЗ на техническую специальность, ВУЗ достаточно хороший(Питер) на Бюджет! Проучился я там год, и ушел. (К слову, за этот год я получил больше знаний чем за всею учёбу в школе)
                        Так вот к чему этот скучный текст, даже идиот может сдать ЕГЭ не зазубривая н-е-ч-е-г-о.
                        0
                        Разве для оценивания не используется Нормальное Распределение?
                        image

                        На самом деле интересно. В UK именно так всё. Всегда будут те, кто провалил, и те, кто сдал на максимум. Хотя их и мало.

                        P.S.: Не улавливаю смысла экзамена, если все сдадут…
                          0
                          Не совсем оно: www.ege.edu.ru/ru/main/scaling/
                          То есть теоретически все могут написать очень хорошо или очень плохо, но на практике такого не случится
                            –1
                            ЕГЭ это прежде всего выпускной экзамен, экзамен на право получить аттестат «зрелости». Все сдали — государство считает такой уровень как минимум минимальным :) для своих граждан, желающих считаться образованными.
                              0
                              За задания начисляются первичные баллы, и потом их переводят в тестовые.
                              +2
                              Вот это мне совсем не понятно. Вот есть некие «соображающие люди»(ТМ). Есть якобы тупейший экзамен, задания которого известны с точностью до подставленных цифр. По идее «соображающие люди»(ТМ) должны этот экзамен с легкостью сдавать на 100 баллов. В реальности получаем только больше 80, то есть «четверочка» или «школьная пятерочка, но для приличного вуза мало».
                              Что случилось с этими «соображающими людьми»(ТМ)? Они показали кукиш Системе тупых зубрил? Тогда логично, если они дальше пойдут работать кочегарами. Они «понимают суть задач», но не могут их решить? Это странно.
                              Что-то я не понимаю этой современной логики «Экзамен тупой, поэтому я сдаю его плохо, дайте мне экзамен в 10 раз сложнее, вот его я сдам отлично»
                                0
                                Ресурсов у школьников не хватает, чтобы быть одновременно «соображающими» и «внимательными». Поэтому «соображающие» допускают глупые ошибки в простых задачах. И поэтому «соображающие» идут на олимпиады, которые им потом засчитываются как 100 баллов.
                                Совершенно нормальная система.
                                  –1
                                  Ну как-то не знаю, пусть таблетки что ли какие-нибудь принимают или головоломки на «найди 10 отличий» решают. Работодателям все-таки хотелось бы, чтобы, допустим, программист был одновременно и с головой и чтоб не путал «10», «100» и «1.00».
                                    0
                                    Тогда пусть не берет на работу школьников, а даст мозгу немного окрепнуть. Сообразительность, если она была, останется, а внимательность разовьется — жизнь заставит.
                                    А головоломки «найди 10 отличий» решаются за 10 секунд, если развести глаза в разные стороны. Внимательность тут ни при чем.
                                      0
                                      >> Сообразительность, если она была, останется, а внимательность разовьется — жизнь заставит.

                                      А почему не наоборот «Привычка к собранности, если она была, останется, а „сообразительность“(ТМ) разовьется — жизнь заставит»?
                                        +2
                                        Да, и такой вариант возможен. Но не ожидайте от 17-летних ребят и девчонок того и другого одновременно. Хотя я не отрицаю, что и такие могут быть. Но — не видел.
                                    0
                                    Вы на основании чего заявления делаете?
                                    Мои друзья, которые целенаправленно шли в IT набрали себе под сотню на инфе, шарившие в физике набрали под сотню на физике.
                                      0
                                      Я рад за них. Значит, бывают и такие.
                                      А другие целенаправленно идут на математику, но набирают по ней 80 (а по русскому — 100). И все равно идут на математику. За них я тоже рад.
                                      Совершенно нормальная система.
                                0
                                которого общее число камней в двух кучках становится больше 25
                                А что если не 25, а, к примеру, 180? Тоже деревца рисовать будете? Очень напомнило мне эту задачу. Она куда сложнее C2, C3, C4… Хотя, если честно, всё сводится тупо к кешу :)

                                Мне кажется задача C3 имеет куда большее отношение к информатике, чем, к примеру, С1. Честно говоря, меня любые задачи на геометрию бросают в ужас. Как то готовясь к ACM, я наткнулся на задачу, в которой, всё сводилось к подсчёту общей площади двух окружностей разного диаметра. Я её сам так и не решил… Но её рейтинг был в двое\трое меньше, чем в задачах на динамику.
                                  0
                                  Ой помнится мне эта задачка про общую площадь… помню там несколько случаев надо рассматривать было. Помучился я тоже с ней)
                                    +1
                                    Вот такой вот ужас у меня в итоге получился лет 5 назад
                                    #include <iostream>
                                    #include <math.h>
                                    using namespace std;
                                    
                                    struct point{
                                        int x,y;
                                    };
                                    
                                    int main(){
                                        double const Pi=3.14159265;
                                        freopen("input.txt","r",stdin);
                                        point p1,p2;
                                        cin >> p1.x >> p1.y >> p2.x >> p2.y;
                                        int r; cin>>r;
                                        int S2; cin >> S2;
                                        int dx=p2.x-p1.x; dx*=dx;
                                        int dy=p2.y-p1.y; dy*=dy;
                                        double d=sqrt((double)(dx+dy));
                                        double S;
                                        if (d>=2*r) {
                                            S=Pi*r*r*2; // если круги не совпадают
                                        } else if (p1.x==p2.x && p1.y==p2.y){
                                            S=Pi*r*r; // круги совпадают полностью
                                        } else { // круги совпадают частично
                                            S=Pi*r*r*2;
                                    
                                            double x=2*r-d;
                                          double h=r-(x/2);
                                          double b=2*sqrt(r*r-h*h);
                                          double ss=b*h/2;
                                          double alpha=(2*atan(b/(2*h)))*(180/Pi);
                                          double sec=Pi*r*r*alpha/360;
                                          if (alpha>180) ss*=-1;
                                          double seg=sec-ss;
                                          double sr=2*seg;
                                          S-=sr;
                                          //cout << sr << " ";
                                        }
                                    
                                        if (S>S2) cout << "YES"; else cout << "NO";
                                        freopen("output.txt","w",stdout);
                                        if (S>S2) cout << "YES"; else cout << "NO";
                                    }

                                    Глядя на эти sqrt, atan, pi и какие то страшные шаманства, а также на мой уже коммерческий опыт по профессии, я всё больше недоумеваю. Какое отношение это имеет к информатике? :)
                                      0
                                      А это мое решение. Переписывал на скорую руку.
                                      <pre> int main() { const double pi = 3,1415926535; double x1, y1, x2, y2, r1, r2, beta, sum; cin>>x1>>y1>>r1; cin>>x2>>y2>>r2; double d = sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); if (r2 > r2) { double t = r1; r1 = r2; r2 = t; } if (d + r1 <= r2) sum = pe*r1*r1; else if (d>=r1+r2) sum = 0; else { double x = (r2*r2 - r1*r1 + d*d)/ (2*d); double y = d-x; double h = sqrt(r2*r2 - x*x); double alpha = 2*atan(h/x); if (y == 0) beta = pi; else if (y < 0) beta = 2*(atan(h/y) + pi); else beta = 2*atan(h/y); sum = 0,5*r2*r2*(alpha - sin(aplha)) + 0,5*r1*r1*(beta - sin(beta)); } cout<<sum; return 0; } </pre>
                                        0
                                        Ой блин. Не получилось как у тебя)
                                          0
                                          Мое решение этой задачки
                                          int main()
                                          {
                                          const double pi = 3,1415926535;
                                          double x1, y1, x2, y2, r1, r2, beta, sum;
                                          cin>>x1>>y1>>r1;
                                          cin>>x2>>y2>>r2;
                                          
                                          double d = sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
                                          
                                          if (r2 > r2)
                                          {
                                          double t = r1;
                                          r1 = r2;
                                          r2 = t;
                                          }
                                          
                                          if (d + r1 <= r2) sum = pe*r1*r1;
                                           else
                                            if (d>=r1+r2) sum = 0;
                                             else
                                              {
                                               double x = (r2*r2 - r1*r1 + d*d)/ (2*d);
                                               double y = d-x;
                                               double h = sqrt(r2*r2 - x*x);
                                               double alpha = 2*atan(h/x);
                                                 if (y == 0) beta = pi;
                                                  else
                                                 if (y < 0) beta = 2*(atan(h/y) + pi);
                                                  else
                                                   beta = 2*atan(h/y);
                                                 sum = 0,5*r2*r2*(alpha - sin(aplha)) + 0,5*r1*r1*(beta - sin(beta));
                                              }
                                            cout<<sum;
                                           return 0;
                                          }
                                          

                                            0
                                            if (r2 > r2)? :)
                                            Плюс описка, pe вместо pi. В случае, когда один круг лежит внутри другого.
                                            Плюс, я полагаю, менять местами нужно не только радиусы, а еще и точки (координаты).
                                              0
                                              Я писал на скорую руку :) А вот точки менять местами не обязательно. Меня интересует тока факт большого радиуса при этом точка остается с теми же координатами) Я помню, что эта задача проходила все тесты на каком-то сайте :)
                                            0
                                            Ну, это более сложная задача… И здесь ищется площадь пересечения, не так ли?

                                            Начал писать свой код, но оказалось, что он получается точно таким же :( Только alpha и beta я бы считал через арккосинус:
                                            alpha=acos(x/r2); beta=acos(y/r1);
                                            — не нужно разбирать несколько случаев. Или воспользоваться функцией atan2 — ей должен владеть любой, кто активно занимается комьютерной геометрией.
                                            0
                                            Мне было интересно повозится с математической точки зрения. А так конечно никакого отношения не имеет)
                                              +2
                                              Спросите у авторов и первых пользователей фортрана. Они расскажут, что информатика — это кодирование формул. А компьютер — большой арифмометр.
                                              И площадь объединения кругов — далеко не самая страшная математика, которую мне приходилось кодировать. Например, мне часто нужно найти перемещение, минимизирующее расстояния между точками из какого-то набора и их «истинными» положениями. Отношение количества математики к количеству кодирования там намного больше, чем в «фонариках». Но что это, как не информатика? Математик, мало знакомый с компьютерами, там мало что сделает.

                                              А в задаче с фонариками
                                              double x1,x2,y1,y2,r,S1;
                                              scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&r,&S1);
                                              double d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
                                              double S = d<2*r? 2*r*r*(pi-acos(d/2/r))+d*sqrt(4*r*r-d*d)/2: 2*pi*r*r;
                                              printf(S<S1? «Yes\n»: «No\n»);

                                              — и никакого шаманства.
                                                0
                                                double d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
                                                double S = d<2*r? 2*r*r*(pi-acos(d/2/r))+d*sqrt(4*r*r-d*d)/2: 2*pi*r*r;
                                                и никакого шаманства.
                                                Как то не вяжутся. Особенно вторая строчка. Или это шутка такая? :) Её следует разбить на пяток-десяток строк с подробным комментированием каждой, ИМХО.
                                                Спросите у авторов и первых пользователей фортрана. Они расскажут, что информатика — это кодирование формул. А компьютер — большой арифмометр.
                                                Компьютер помогает решать прикладные задачи. Они могут быть самого разного профиля, в том числе и с наклоном на выш.мат. Вот только что толку с этого? Давайте в учебник по алгебре добавим задачи по квантовой физике и подсчёте скорости чтения данных с SSD? :) Ведь там активно используется математика. И самое главное не давать при этом физических формул. Надеюсь аналогия ясна.
                                                Но что это, как не информатика? Математик, мало знакомый с компьютерами, там мало что сделает.
                                                Примитивный скриптовый язык + день обучения математика не принесёт бОльших результатов? Я всегда исходил из того, что вышмат сложнее большинства задач, поставленных перед программистом. И если математик осилил вышмат (а иначе какой он математик?), то проблем с логикой и примитивным программированием у него быть не может. С другой стороны для пространного воображения (это я про геометрию) одной логики мало :)

                                                Я считаю, что вопреки тому, чему нас учат в универах, самыми ценными навыками у программиста являются создание и следование правильной инфраструктуре кода. А вовсе не теоремы Лагранжа. Это самое качество нельзя получить из книжек или (в особенности) олимпиадок. Нужен живой опыт проектирования систем от простых самых до сложных. Вот это, я считаю, информатика. А умение записать сложную химическую формулу на питоне, обрамив её двумя циклами, это решение прикладной химической задачи на ЭВМ. Конечно, программирование != только проектирование, но надеюсь моя мысль ясна.
                                                  +2
                                                  Или это шутка такая? :) Её следует разбить на пяток-десяток строк с подробным комментированием каждой, ИМХО.

                                                  Когда математик пишет статью, он обычно не разбивает формулы на «десяток строк с подробным комментированием каждой». Пишется формула на 3-4 строчки, потом «откуда следует» или " с учетом соотношения (3.5.12)", потом следующая формула. И это не в коде, который то ли будут разбирать, то ли нет — а в статье, которую читать будут наверняка. И все к этому отлично относятся. Почему же программисты считают друг друга дураками, которым все надо разжевавать, класть в рот, и гладить по горлышку, чтобы проглотили? Формула длиной в одну строку кода — вполне обозримый объект. Формула длиной в 24 строки — тоже, если эти строки отличаются только индексами и знаками ±, и написаны аккуратно одна под другой (например, произведение кватернионов).
                                                  Давайте в учебник по алгебре добавим задачи по квантовой физике и подсчёте скорости чтения данных с SSD? :)

                                                  Имеется в виду школьная «алгебра»? Давайте. Чтение данных с SSD ничем не хуже наполнения бассейна водой. И можно подобрать задачи на разных уровнях. С квантовой физикой немного сложнее, но и там можно найти задачи, иллюстрирующие не только конкретное физическое явление, но и конкретный математический прием (к сожалению, я плохо помню школьный курс, чтобы сказать точнее. Но задача вполне может быть, например, на какое-нибудь излучение/поглощение фотонов при переходе электронов между уровнями).
                                                  Примитивный скриптовый язык + день обучения математика не принесёт бОльших результатов? Я всегда исходил из того, что вышмат сложнее большинства задач, поставленных перед программистом.

                                                  Дня и примитивного языка может не хватить. По крайней мере, структуры данных и реализация эффективных (а иногда и эвристических) алгоритмов для задачи совмещения точек (в некоторых формулировках) будут нужны. Кроме того, не забывайте, что есть целый курс (и кафедры, и специальность) «вычислительная математика» — как раз про алгоритмизацию решения математических задач. Правильная структуризация кода и данных там не менее важна, чем учет погрешности вычислений и знания повадок дифференциальных уравнений при разных подходах к решению. А еще есть символьные вычисления — там и математики и информатики еще больше, и при этом люди ими реально занимаются.

                                                  Я считаю, что вопреки тому, чему нас учат в универах, самыми ценными навыками у программиста являются создание и следование правильной инфраструктуре кода. А вовсе не теоремы Лагранжа. Это самое качество нельзя получить из книжек или (в особенности) олимпиадок. Нужен живой опыт проектирования систем от простых самых до сложных. А умение записать сложную химическую формулу на питоне, обрамив её двумя циклами, это решение прикладной химической задачи на ЭВМ.

                                                  Не думаю, что навыки имеет смысл делить на более и менее ценные. Создание инфрастуктуры кода. Выбор и реализация структуры хранения данных. Выбор алгоритмов для задачи, ложащихся в инфраструктуру кода и коррекция инфраструктуры для возможности более эффективной реализации алгоритмов. Разработка алгоритмов для нетипичных формулировок и ситуаций. Умение обнаружить, предсказать и предотвратить влияние погрешности вычислений, фрагментации памяти, сбоев потоков и прочих неакадемических особенностей реального мира на качество/эффективность работы программы. Все нужно. И все важно. Уметь уложить программу управления мотором в 100 байт не менее важно, чем уметь поддерживать проект на миллион строк в рабочем и развивающемся состоянии.
                                                    0
                                                    цитаты не оформились :(
                                                      0
                                                      Почему же программисты считают друг друга дураками, которым все надо разжевавать, класть в рот, и гладить по горлышку, чтобы проглотили?
                                                      Мммм, поддержка кода? Если код похож на тот, что вы привели выше — его остаётся только удалить. Скорее всего никто даже разбираться не будет. И правильно сделает. Я всегда стараюсь писать код так, чтобы он и без комментариев был предельном ясным. И считаю, что любой другой подход в корне не верен.
                                                      Давайте. Чтение данных с SSD ничем не хуже наполнения бассейна водой
                                                      Вы, полагаю, невнимательно прочитали мой комментарий. Сделайте это без доп. данных. Ведь в этой задаче про круги нам даны только радиусы. Зная только информатику эту задачу не решить никак. Нужны познания в геометрии. Т.е. познания, которые должны быть в задаче по геометрии, а не по информатике. Из информатики в ней только 2 условия и чтение\вывод результатов.

                                                      По поводу всего остального, что вы написали — я согласен, но всё таки многие из этих задач могут не встать перед разработчиком никогда. Они узко-специализированы. К примеру я почти уверен, что мне никогда не придётся укладывать скрипт в Х-байт. Возможно я столкнуть с предотвращением влияния погрешности вычислений, а возможно и нет. А дифференциальные уравнения мне, почти наверняка, не пригодятся никогда, т.к. я вряд ли возьмусь за подобную задачу. У меня для неё нет ни знаний, ни опыта. Зато есть опыт в чём то ином, и соответственно задачи будут другие. А умение и поддержание хорошей инфраструктуры кода нужно всем, всегда и везде :)
                                                        0
                                                        Для решения задач по физике могут потребоваться знания математики. Для задач по астрономии — знания математики и физики. Для задач по биологии — знания химии. Для задач по обществознанию — знания по географии и истории. И это почему-то никого не удивляет. Почему же для задачи по информатике не могут требоваться знания математики?
                                                        Да, информатики там немного — ввести данные, проверить два случая, посчитать и вывести результат. Но и в физических задачах картина аналогична.

                                                        Насчет того, что «код остается только удалить» — возможно. Не исключено, что я, когда надо будет работать с кодом, удалю 20 чужих строчек (и две дополнительных функции). в которых и кода не видно из-за комментариев, и напишу 5 простых и понятных формул. Потому что их поддерживать гораздо легче. По крайней мере, мне так кажется. Они на экране, все на виду, я могу охватить их взглядом и увидеть, что откуда берется и как используется. А ползать по коду взад-вперед, разбираясь, где возникла очередная переменная с 20-буквенным именем (которое, наверное, что-то означало для автора в момент, когда он его придумывал), и зачем нужна очередная функция — несколько сложнее.

                                                        Но в своей программе я сейчас не пишу d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)) — эта формула встречается слишком часто, и для нее заведена функция: d=MyMath.pyth(x1-x2,y1-y2).
                                                          0
                                                          Почему же для задачи по информатике не могут требоваться знания математики?
                                                          Я такого не утверждал. Но если математики там >= чем информатики, то это уже скорее математическая задача. И решать её должны в рамках экзамена\олимпиадки по математике. А если это реальная, а не учебная задача, то это не подходит под рамки обсуждаемого вопроса.
                                                          Насчет того, что «код остается только удалить» — возможно. Не исключено, что я, когда надо будет работать с кодом, удалю 20 чужих строчек (и две дополнительных функции). в которых и кода не видно из-за комментариев, и напишу 5 простых и понятных формул. Потому что их поддерживать гораздо легче. По крайней мере, мне так кажется.
                                                          Т.е. если вы будете работать в паре, то будете попеременно удалять код друг друга? :)
                                                          где возникла очередная переменная с 20-буквенным именем (которое, наверное, что-то означало для автора в момент, когда он его придумывал), и зачем нужна очередная функция
                                                          Всего 20-буквенная? Посмотрите на типичный Java-код :) Я считаю, что если код пишется не для «здесь и сейчас», то очередная функция, в рамках декомпозиции, будет куда уместнее, нежели строка с мат.формулой сжатой до одной строки, и потому понятная только тому, кто её писал :) Ведь вы считаете что
                                                          d<2*r? 2*r*r*(pi-acos(d/2/r))+d*sqrt(4*r*r-d*d)/2: 2*pi*r*r;
                                                          простая и понятная формула, да? Что-то мне подсказывает, что у вас очень узкая специализация, а посему и совершенно другой взгляд на вещи. Лично мне эта мат.строка больше напоминает результат md5 :)
                                                            0
                                                            Если математика — от преобразований Фурье и фильтрации сигналов до компьютерной графики и геометрии — узкая специальность, то да, узкая. Но формула простая и понятная. Как, впрочем, и чужой дисассемблированный код (на знакомом процессоре) — его я тоже читаю свободно. И там нет ни 20-буквенных имен, ни комментариев — поэтому он понятнее.
                                                              0
                                                              Если математика — от преобразований Фурье и фильтрации сигналов до компьютерной графики и геометрии — узкая специальность, то да, узкая
                                                              Конечно узкая. Если прошерстить, к примеру, github, то, я думаю, обнаружится, что процент проектов, использующих преобразование Фурье, стремится к нулю. Да и те единицы что используют, можно сильно отфильтровать, в случае, если они используют какую-нибудь уже готовую либу, с его применением. Примерно с таким же успехом можно искать ASM-вставки.
                                                              И там нет ни 20-буквенных имен, ни комментариев — поэтому он понятнее.
                                                              Честно говоря, не понимаю чем вас пугает, к примеру, Model_I18n_Variables. Меня к примеру переменные g, m, r, v, l и иже с ними пугают куда больше, потому что они чёрт знает что значат :) И написав их сегодня, послезавтра я не буду иметь ни малейшего представления об их назначении, не погрузившись в код с головой.
                                                                0
                                                                Процент проектов, использующих (и реализующих в себе) хоть какую-нибудь серьезную математику, тоже мал? Сомневаюсь… Даже если исключить экономику (увы, это не моё).

                                                                Model_I18n_Variables (да еще и в качестве локальной переменной) меня пугает, например, тем, что если поблизости (в том же методе) окажется Model_J16h_Variables, то мне будет трудно их визуально различить. А смысл g,m,l… определяется легко — достаточно взглянуть на строчку, где им присваивалось что-нибудь существенное. Погружения с головой не требуется.
                                                                  0
                                                                  I18n === i[nternationalizatio=18букв]n. Общепринятое сокращение. Так что за j16n не переживайте, такого не будет.
                                                                  А смысл g,m,l… определяется легко — достаточно взглянуть на строчку, где им присваивалось что-нибудь существенное.
                                                                  Похоже мы с вами слишком разные задачи решаем.
                                                                    0
                                                                    Похоже. Потому что в случае моих задач I18n было бы маркировкой какого-нибудь микроконтроллера или датчика. Поэтому эту маркировку пришлось бы сделать в имени как можно более заметной.
                                            0
                                            Понравилась новая C4. Хотя решение пришло в голову уже во время прочтения, но задача и вправду довольно тонкая. Вот только меня всегда раздражают такие длинные условия.
                                              +1
                                              Вот только меня всегда раздражают такие длинные условия
                                              Особенно когда они:
                                              — на английском
                                              — в шуточной манере
                                              — с тонкими моментами, не обозначенными явно
                                                0
                                                Так в этом и смысл.

                                                Вам же на практике тоже не всегда сразу ТЗ выдадут, а уж если для себя делаете что-нибудь.
                                                  0
                                                  Ну я могу хотя бы уточнить спросить у заказчика непонятные моменты. А на ACM нам на request-ы всегда приходил отрицательный ответ, который означает, что в задаче есть все ответы, но читать её нужно как-то альтернативно :) А это, знаете ли, сложно сделать, если читаешь её с использованием толстенного словаря :)
                                                    +2
                                                    У нас в институте преподаватель из Яндекса вёл тех-курс по Python, а задания использовались как раз с одного англоязычного онлайн-контестика.

                                                    На чей-то вопрос: «а может перевёдете?» посоветовал учить язык)
                                                0
                                                Условия это да… Я не понимаю зачем их делать такими большими прям как в олимпиадах. Думаю на ЕГЭ все должно быть коротко и ясно!
                                                  0
                                                  Вот я не вкурсе — просвятите. Ведь, как мне известно, С4 пишется на листочке? Там как-нибудь сильно опечатки(описки) снижают балл? Банальное пропущенная, например, ;.
                                                    0
                                                    Допускается наличие в тексте программы одной синтаксической ошибки: пропущен или неверно указан знак пунктуации, неверно написано или пропущено зарезервированное слово языка программирования, не описана или неверно описана переменная, применяется операция, не допустимая для соответсвующего типа данных(ели одна и таже ошибка встречается несколько раз, то это считается за одну ошибку). Это из официального критерия.
                                                      0
                                                      OMG!!! Пропустил not в условии и задача зачтена?! А если лишнее добавил, то пофиг? Асимметрия?
                                                    0
                                                    Думаю 100 баллов на ЕГЭ должны получать призеры Всероссийских олимпиад, и то не факт.
                                                  +1
                                                  Мой преподаватель говорит, что в рамках школьной программы мы будем разбирать только С2 и С1. Все остальное — олимпиадный уровень.
                                                    +3
                                                    Мне искренне жаль Вашего преподавателя… Ну, естественно, если он верит в свои слова.
                                                      +2
                                                      Так уровень образования не везде одинаков. Что считается нормой для столичных регионов — сложные, олимпиадные задачи в других местах.
                                                        0
                                                        А я-то думал, почему олимпиады по регионам разделяют…
                                                        • UFO just landed and posted this here
                                                        0
                                                        На олимпиадах в школе и колледже и первые задачи и правда такие же почти. Самая хохма в том, что осенью тут в родимый колледж меня позвали чудьей проверить решения — так из пяти задад в специализированном колледже среди всех трех курсов победитель решил вроде бы две только, и то не до конца. Зато первокурсники отличились — решали коллективно втроем (впрочем, все равно неправильно).
                                                        Так что имхо на информатике надо учить логически смылить в первую очередь, а программировать — уже во вторую.
                                                          +1
                                                          Логически мыслить должны были на математике, имхо. Чисто формальную логику… А на информатике скиду на ограниченные ресурсы, возможности, точность…
                                                          +1
                                                          Самое интересное в том, что я учусь на информационном направление. Занимаюсь информатикой не по школьной программе и большинство тех знаний, которые имею на данный момент в области информатики, приобрел не благодаря школе, а благодарю любопытству и самообразованию. И да, ориентирном на данный момент является не ЕГЭ, а ИОИП. Но ведь есть и те, которые рассчитывают на школьную программу…
                                                          +1
                                                          Новые С3 и С4 неплохи.

                                                          А старая С3 такой гадостью была.
                                                          Прямо заметно было, что те, кто занимаются программированием её ненавидят: ручная работа, которую программисты и не любят)
                                                          А вот люди далёкие от IT как раз её любили — для них это был способ набрать баллы влёгкую.
                                                            +2
                                                            Да, задачи стали интереснее. Интереснее для того, кто понимает суть задачи. Для учителей и учеников ничего не изменилось: просто нужно зубрить другое.

                                                            По поводу С3 — есть еще вариант решения через таблицу, по сути интерпретация рекурентного метода
                                                              –1
                                                              Старая С1 не понравилась, прежде всего начал думать над ошибками округления y>=x*x-2, а не проверять соответствие алгоритма рисунку. Подозреваю что можно подобрать такие X и Y, что правильный ответ окажется неправильным. Новая (хотя основа не приведена) в этом плане кажется не должна уводить в сторону.

                                                              С3 не понравились обе. Потому что к информатике отношения не имеют. Ну не считать же отношением слова «программа», «команда»и и «исполнитель» в новой?

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

                                                                +1
                                                                Мне С4 этого года понравилась больше. Она заставляет немного подумать над оптимизацией. По мне это интереснее чем парсить строку (хотя конечно надо проверять как технические, так и алгоритмические знания ученика).
                                                                  0
                                                                  >>умением распарсить строку
                                                                  В том-то и дело, что слишком зависит от языка. Кто-то сдаст 5-страничное решение на асме, а кто-то однострочник на перле. Тут-же только алгоритмы, ничего языкоспецифичного.
                                                                    0
                                                                    На практике все шпарят что-то среднее на Паскале)
                                                                      0
                                                                      И какое решение должно быть оценено выше? И вообще, имхо, если на экзамене по информатике не задано ни одного ограничивающего условия, то приниматься за нормальное решение должно любое дающее в теории нужный результат.
                                                                    0
                                                                    Новая С4 понравилась ограничением по памяти.
                                                                    И в крайней степени не понравилась старая С3 :)
                                                                      0
                                                                      Согласен. Новая С4 хороша. Особенно ограничением по памяти и по времени. Еще бы условие по короче сделали, все таки не олимпиада это…
                                                                        0
                                                                        Условие нормальное, на большом потоке проявляется себя даже малейшая неопределенность в условии.
                                                                      0
                                                                      Новая C3 — это старая B-какая-то, так что тут тоже упрощение
                                                                        0
                                                                        >Немного поразмыслив можно понять, что, так как исходное число состоит из произведения 2 чисел со знаком, то оно будет максимально, если это два самых больших или два самых маленьких из входных чисел.

                                                                        Может надо все-таки найти два максимальных числа и перемножить? Само-собой не совпадающих.
                                                                          0
                                                                          Нет, если скорости -7, -6, 1, 2, то ответ будет 42, а произведение максимальных — 2.
                                                                            0
                                                                            Максимальных по модулю и одного знака.
                                                                              0
                                                                              Тогда придется отдельно разобрать случай, когда в массиве только два числа — положительное и отрицательное.
                                                                              Найти два максимальных и два минимальных, перемножить каждую пару и сравнить произведения — гораздо проще кодируется. И гораздо меньше шансов ошибиться.
                                                                                0
                                                                                Тут, кстати, не совсем понятно, должны ли они быть одного знака? Если нет, то вообще достаточно найти 2 максимальных по модулю.
                                                                                  0
                                                                                  Нет. Выражение «произведение которых максимально» читается совершенно однозначно. Если бы имелось в виду «максимально по модулю», так бы и написали.
                                                                                  Но найденные числа не обязаны быть одного знака. Например, в случае "-7, 6" ответ будет -42.
                                                                                    0
                                                                                    Я это понимаю, но все же меня терзают смутные сомнения. С точки зрения пользы для того, чтобы отличать одну серию экспериментов от другой знак — дополнительный источник информации. При прочих равных, число со знаком дает больше информации об эксперименте, чем число без знака. Так что было бы глупо от него отказываться.
                                                                                    Если все же знак не нужен, тогда нужно искать 2 максимальных положительный (при условии, что их больше 1) и 2 максимальных отрицательных (при условии, что их больше 1).
                                                                                      0
                                                                                      Да, зачем искать максимальное произведение, не очень понятно. Хотя, при распознавании изображений мы иногда ищем пару картинок, корреляция между которыми максимальна. А она в каком-то смысле и есть — максимальное произведение, независимо от знака аргументов — лишь бы знак был, по-возможности, одинаковым.

                                                                                      Если все же знак не нужен, тогда нужно искать 2 максимальных положительный (при условии, что их больше 1) и 2 максимальных отрицательных (при условии, что их больше 1).

                                                                                      Можно. Но код получится сложнее.
                                                                                        0
                                                                                        Можно. Но код получится сложнее.

                                                                                        Так вы то же самое предложили. Только я уточнил, что нужно иметь в виду, что минимальное != отрицательное и максимальное != положительное. Из 2 максимальных одно может быть 5, а второе -2. Их произведение нам не нужно.
                                                                                          0
                                                                                          Я предлагал вообще не смотреть на знаки (и автор, насколько я понимаю, тоже). Программа, которая будет анализировать знаки, окажется запутаннее, чем та, которая просто находит два максимума и два минимума.
                                                                            0
                                                                            А какие языки можно использовать? Хаскель там, питон или перл можно?
                                                                              +2
                                                                              Паскаль, C, Basic и русский
                                                                                +1
                                                                                Последний абзац статьи.
                                                                                  0
                                                                                  Я когда сдавал писал на Perl :)
                                                                                    0
                                                                                    Мм, за это теперь минусуют в карму.
                                                                                    0
                                                                                    Я не уверен, но наш преподаватель говорила, что любой. Один ученик написал на каком-то экзотическом языке программирования, так что все учителя коллективным разумом смогли определеить лишь основную логику.
                                                                                    +8
                                                                                    Все кому интересно посмотреть на задачи, которые были на протяжении 7 лет и на то, как они были изменены в 2012 году, прошу подкат.

                                                                                    Done.

                                                                                      +3
                                                                                      Вот толковый подкат
                                                                                      image
                                                                                      0
                                                                                      Условие последней С4 для меня не совсем ясно. В условии говориться про максимальное произведение скоростей — интепретировать числа как скорости, или как числа? Если как скорости, то необходимо найти максимальное произведение по модулю (какая разница, в какую сторону летят частицы, если нам важна их скорость), если же как числа — без модуля.
                                                                                        0
                                                                                        Как модуль скорости.
                                                                                          0
                                                                                          Как проекции скорости на ось. Модуль скорости не может быть отрицательным.
                                                                                        0
                                                                                        C3 очень хорошо проверяется графически если нарисовать состояния и переходы, конечно для 100 ячеек это уже будет проблемой, но все равно это наиболее доходчивая демонстрация решения.

                                                                                        При введении 4-5 команд инкрементарного характера и разрыва между начальным и конечным значение побольше, задача заиграет новыми красками, если там будет фигурировать вычитание или какая либо форма обратных переходов, то можно как следует развлечь старшие курсы.

                                                                                        Вообще переходы — это хороший класс задач, особенно если нужно постепенно готовить ребят к дискретке.
                                                                                          0
                                                                                          С вычитанием могут вылезти циклы. И число программ станет бесконечным.
                                                                                            0
                                                                                            Ну так о чем и речь, с доказательства решаемости и выделения конечных или нет множеств решений начинается математика посерьезней.
                                                                                          0
                                                                                          > Тогда R(n) = R(n/3)+R(n-1)= R(n/3)+R(n-3) (если n>3)

                                                                                          Раскройте слово «тогда» пожалуйста. Не совсем ясен переход.
                                                                                            0
                                                                                            Можно перейти:
                                                                                            — из n-3 прибавляя единицы (одним способом)
                                                                                            — из n/3 умножив (одним способом)
                                                                                            — из n/3 прибавляя единицы — но этот вариант входит в первую ветку.

                                                                                            Отсюда получаем искомую формулу.
                                                                                              0
                                                                                              R(n) = R(n/3)+R(n-3) — понятно по вашим пунктам
                                                                                              R(n) = R(n/3)+R(n-1) — не понятно почему «n-1»?
                                                                                                0
                                                                                                R(n-1) = R(n-3) если n = 3*k, k > 1.

                                                                                                При таких условиях мы можем перейти единственным способом, прибавляя единицы.
                                                                                                  0
                                                                                                  теперь ясно, что имелось ввиду. смутило что R(n-1) оказалось на первом месте в равенствах, и то что нет R(n-2)
                                                                                            0
                                                                                            Старая С3 — дерево на картинке не полное (либо не хватает объяснения, почему какие-то варианты пропущены)
                                                                                            Нормальная задача для потенциальных программистов, вполне даже
                                                                                              0
                                                                                              Ну там варианты при которых игрок заведомо проигрывает не учитываются.
                                                                                              0
                                                                                              Никто не заметил ошибку у автора поста в С1?

                                                                                              if (y>=x*x-2) and (y<=x) and (x>=0) or (x<=0) and (y<=-x) and (y>=x*x-2) then


                                                                                              Да не то что даже ошибка (она типичная слишком), а можно записать условие гораздо компактнее
                                                                                                0
                                                                                                Ну, да. if(y>=x*x-2 && y<=fabs(x)){… }
                                                                                                А ошибка-то в чем? Или в Паскале приоритеты and и or не такие, как в С?
                                                                                                0
                                                                                                Тоже заметил, но это уже от невнимательности. Чем мне не нравится писать программу на бумажке, так это тем, что на реальном компьютере при первой же компиляции все описки сразу же уйдут. На бумажке можно что-то и пропустить.
                                                                                                  0
                                                                                                  И как же компилятор заметит ошибку с приоритетами?
                                                                                                    +1
                                                                                                    Конкретно в этом случае никак. Фраза про компиляцию относилась ко многим встречающимся ошибкам в целом. Ошибку с расстановкой приоритетов операций легко обнаружить прогнав программу 1-2 раза для теста. На бумаге и такой возможности не будет.
                                                                                                0
                                                                                                В С3 в этом году было несколько другое условие: 1) Прибавь 1 к числу 2) Прибавление единицы к каждой цифре числа, если цифра 9, то так и остается. 27 — 38 | 28 — 39 | 29 — 39 | 30 — 41.
                                                                                                В С3 потерял 1 балл, т.к. забыл, что из 29 в 39. ( пропустил одну программу ). Решал таблицей.
                                                                                                В моем С4 были только положительные скорости частиц, и нужно было вывести наибольше четное произведение, и если нету, то нечетное. Решалось через 4 переменные: макс четное, 2 макс четное, макс нечетное, 2 макс нечетное. И в конце выводить, то что нужно.
                                                                                                Вообще задания егэ были легкими.
                                                                                                С часть писал на Си, и зачем автор использует паскаль?
                                                                                                Так же в егэ интересное А15 задание с роботом.
                                                                                                Егэ написал на 94 балла.
                                                                                                  0
                                                                                                  Наибольшее четное произведение или наибольшее произведение четных?
                                                                                                0
                                                                                                Обе С3 по большому счету ничем друг от друга не отличаются, не?
                                                                                                  0
                                                                                                  Ну если решать деревом то да. Только вроде в новой дерево больше получается.
                                                                                                    0
                                                                                                    Отличаются и сильно. В старой надо понять, что позиция для тебя является проигрышной, если все ходы из нее ведут в выигрышную для противника позицию, а в остальных случаях позиция для тебя выигрышная. Этакий эпсилон-дельта формализм, понять который непросто. Так что надо нарисовать все дерево игры, а потом аккуратно раскрашивать его вершины в черный и белый цвета — и ни разу не сбиться. А в новой — всего лишь динамика и рекуррентная формула.
                                                                                                    +1
                                                                                                    Именно однотипные задачи, «набивают» руку для решения более сложных задач.
                                                                                                    На своём факультете, я учусь на фисзика, но что ни странно, что если «информатикам» нужно сделать курс лабараторных работ по програмированию. они валят ко мне (и ещё нескольким людям), которые весь курс лаб(около 10-15 в каждой по 2-3 задачи) делают за полтора часа(треть методом гугления, треть методом изменения уже имеющихся, ну истественно треть на коленке по быстрому).
                                                                                                    Это конечно всё замечательно, но печально что все задачи по програмированию замыкаются на математике, геометрии…

                                                                                                    Only users with full accounts can post comments. Log in, please.