Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!

которого общее число камней в двух кучках становится больше 25А что если не 25, а, к примеру, 180? Тоже деревца рисовать будете? Очень напомнило мне эту задачу. Она куда сложнее C2, C3, C4… Хотя, если честно, всё сводится тупо к кешу :)
#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";
}
<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;
}
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? :) Ведь там активно используется математика. И самое главное не давать при этом физических формул. Надеюсь аналогия ясна.
Но что это, как не информатика? Математик, мало знакомый с компьютерами, там мало что сделает.Примитивный скриптовый язык + день обучения математика не принесёт бОльших результатов? Я всегда исходил из того, что вышмат сложнее большинства задач, поставленных перед программистом. И если математик осилил вышмат (а иначе какой он математик?), то проблем с логикой и примитивным программированием у него быть не может. С другой стороны для пространного воображения (это я про геометрию) одной логики мало :)
Или это шутка такая? :) Её следует разбить на пяток-десяток строк с подробным комментированием каждой, ИМХО.
Почему же программисты считают друг друга дураками, которым все надо разжевавать, класть в рот, и гладить по горлышку, чтобы проглотили?Мммм, поддержка кода? Если код похож на тот, что вы привели выше — его остаётся только удалить. Скорее всего никто даже разбираться не будет. И правильно сделает. Я всегда стараюсь писать код так, чтобы он и без комментариев был предельном ясным. И считаю, что любой другой подход в корне не верен.
Давайте. Чтение данных с SSD ничем не хуже наполнения бассейна водойВы, полагаю, невнимательно прочитали мой комментарий. Сделайте это без доп. данных. Ведь в этой задаче про круги нам даны только радиусы. Зная только информатику эту задачу не решить никак. Нужны познания в геометрии. Т.е. познания, которые должны быть в задаче по геометрии, а не по информатике. Из информатики в ней только 2 условия и чтение\вывод результатов.
Почему же для задачи по информатике не могут требоваться знания математики?Я такого не утверждал. Но если математики там >= чем информатики, то это уже скорее математическая задача. И решать её должны в рамках экзамена\олимпиадки по математике. А если это реальная, а не учебная задача, то это не подходит под рамки обсуждаемого вопроса.
Насчет того, что «код остается только удалить» — возможно. Не исключено, что я, когда надо будет работать с кодом, удалю 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 :)
Если математика — от преобразований Фурье и фильтрации сигналов до компьютерной графики и геометрии — узкая специальность, то да, узкаяКонечно узкая. Если прошерстить, к примеру, github, то, я думаю, обнаружится, что процент проектов, использующих преобразование Фурье, стремится к нулю. Да и те единицы что используют, можно сильно отфильтровать, в случае, если они используют какую-нибудь уже готовую либу, с его применением. Примерно с таким же успехом можно искать ASM-вставки.
И там нет ни 20-буквенных имен, ни комментариев — поэтому он понятнее.Честно говоря, не понимаю чем вас пугает, к примеру, Model_I18n_Variables. Меня к примеру переменные g, m, r, v, l и иже с ними пугают куда больше, потому что они чёрт знает что значат :) И написав их сегодня, послезавтра я не буду иметь ни малейшего представления об их назначении, не погрузившись в код с головой.
А смысл g,m,l… определяется легко — достаточно взглянуть на строчку, где им присваивалось что-нибудь существенное.Похоже мы с вами слишком разные задачи решаем.
Вот только меня всегда раздражают такие длинные условияОсобенно когда они:
Если все же знак не нужен, тогда нужно искать 2 максимальных положительный (при условии, что их больше 1) и 2 максимальных отрицательных (при условии, что их больше 1).
Можно. Но код получится сложнее.
Все кому интересно посмотреть на задачи, которые были на протяжении 7 лет и на то, как они были изменены в 2012 году, прошу подкат.

if (y>=x*x-2) and (y<=x) and (x>=0) or (x<=0) and (y<=-x) and (y>=x*x-2) then
ЕГЭ прошлое и настоящее