Как стать автором
Обновить
179
0
Тимур Гуев @tguev

Основатель BEEGEEK, автор курсов Поколение Python

Отправить сообщение
Ну если решать деревом то да. Только вроде в новой дерево больше получается.
Я писал на скорую руку :) А вот точки менять местами не обязательно. Меня интересует тока факт большого радиуса при этом точка остается с теми же координатами) Я помню, что эта задача проходила все тесты на каком-то сайте :)
Ну там варианты при которых игрок заведомо проигрывает не учитываются.
Согласен. Новая С4 хороша. Особенно ограничением по памяти и по времени. Еще бы условие по короче сделали, все таки не олимпиада это…
Мне было интересно повозится с математической точки зрения. А так конечно никакого отношения не имеет)
Мое решение этой задачки
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; } </pre>
Допускается наличие в тексте программы одной синтаксической ошибки: пропущен или неверно указан знак пунктуации, неверно написано или пропущено зарезервированное слово языка программирования, не описана или неверно описана переменная, применяется операция, не допустимая для соответсвующего типа данных(ели одна и таже ошибка встречается несколько раз, то это считается за одну ошибку). Это из официального критерия.
Ой помнится мне эта задачка про общую площадь… помню там несколько случаев надо рассматривать было. Помучился я тоже с ней)
Мне С4 этого года понравилась больше. Она заставляет немного подумать над оптимизацией. По мне это интереснее чем парсить строку (хотя конечно надо проверять как технические, так и алгоритмические знания ученика).
Условия это да… Я не понимаю зачем их делать такими большими прям как в олимпиадах. Думаю на ЕГЭ все должно быть коротко и ясно!
Добрый проверяющий попался. Хотя так и надо. В условиях ЕГЭ написать и с массивом сложно…
Мне мой преподаватель сказал, что обязательно должна быть это рекуррентная формула. Хотя она тоже давала максимальные баллы за решение с деревом.

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность