Как стать автором
Обновить

Комментарии 125

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

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

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

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

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

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

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

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

Мне кажется задача C3 имеет куда большее отношение к информатике, чем, к примеру, С1. Честно говоря, меня любые задачи на геометрию бросают в ужас. Как то готовясь к ACM, я наткнулся на задачу, в которой, всё сводилось к подсчёту общей площади двух окружностей разного диаметра. Я её сам так и не решил… Но её рейтинг был в двое\трое меньше, чем в задачах на динамику.
Ой помнится мне эта задачка про общую площадь… помню там несколько случаев надо рассматривать было. Помучился я тоже с ней)
Вот такой вот ужас у меня в итоге получился лет 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 и какие то страшные шаманства, а также на мой уже коммерческий опыт по профессии, я всё больше недоумеваю. Какое отношение это имеет к информатике? :)
А это мое решение. Переписывал на скорую руку.
<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>
Ой блин. Не получилось как у тебя)
Мое решение этой задачки
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;
}

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

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

А в задаче с фонариками
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»);

— и никакого шаманства.
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? :) Ведь там активно используется математика. И самое главное не давать при этом физических формул. Надеюсь аналогия ясна.
Но что это, как не информатика? Математик, мало знакомый с компьютерами, там мало что сделает.
Примитивный скриптовый язык + день обучения математика не принесёт бОльших результатов? Я всегда исходил из того, что вышмат сложнее большинства задач, поставленных перед программистом. И если математик осилил вышмат (а иначе какой он математик?), то проблем с логикой и примитивным программированием у него быть не может. С другой стороны для пространного воображения (это я про геометрию) одной логики мало :)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Done.

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

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

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

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

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

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

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


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

Публикации

Истории