Несколько сезонов жарких лет и холодных зим изрядно подпортили изгородь Фермера Джона, и он решил перекрасить её с помощью своей любимой коровы Беси. Беси отлично красит, но к несчастью плохо понимает команды ФД.
Если мы рассмотрим изгородь ФД как одномерную числовую прямую, то ФД закрашивает интервал между [latex]x = a[/latex] и [latex]x = b[/latex]. Например, если [latex]a[/latex] = 3 и [latex]b[/latex] = 5, то ФД закрашивает интервал длиной 2. Беси, не понимая команды ФД, закрашивает интервал от [latex]x = c[/latex] до [latex]x = d[/latex], который может частично или полностью перекрываться с интервалом ФД. Определите общую длину изгороди, которую покрасят ФД и Беси.
Входные данные
Первая строка содержит целые числа [latex]a[/latex] и [latex]b[/latex] [latex](a < b)[/latex].
Вторая строка содержит целые числа [latex]c[/latex] и [latex]d[/latex] [latex](c < d)[/latex].
Значения [latex]a, b, c, d[/latex] лежат в интервале 0..100 включительно.
Выходные данные
Выведите в одной строке общую длину изгороди, покрытой краской.
Тесты
Входные данные
Выходные данные
7 10
4 8
6
5 7
1 4
5
1 5
6 9
7
13 17
16 22
9
Код программы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
usingnamespacestd;
intmain(){
inta,b,c,d;
cin>>a>>b>>c>>d;
if(a>c){
swap(a,c);
swap(b,d);
}
cout<<((c<b)?max(b,d)-a:(b-a)+(d-c));
return0;
}
Решение задачи
Считываем все значения из условия и представляем их в виде отрезков [latex]AB[/latex] и [latex]CD[/latex]. Затем проверяем, лежит ли некоторая часть одного отрезка или весь отрезок внутри другого. Если отрезки пересекаются или совпадают, то выводим общую длину отрезка, если отрезки не пересекаются, то выводим сумму длин отрезков.
Например, на картинке отрезки не пересекаются, значит можно просто сложить их длины (переменные [latex]m[/latex] и [latex]n[/latex] введены только в объяснение для удобства)
Тут один отрезок частично лежит внутри другого, значит нужно сложить [latex]m[/latex] и [latex]n[/latex], но отнять длину отрезка [latex]CB[/latex], чтобы не получилось, что мы учли его дважды.
Капля дождя падает вертикально вниз с большой высоты на землю. На пути у капли могут встретиться препятствия, которые изменяют ее путь к земле.
Напишите программу, которая по координате $X$$0$ точки появления капли над землей вычисляет координату $X$ точки соприкосновения капли с землей $(Y = 0).$ Будем рассматривать двумерный вариант (на плоскости) этой задачи. Пусть препятствия – это наклонные непересекающиеся отрезки, а капля имеет точечные размеры. Капля падает вертикально вниз из точки, расположенной выше любого из препятствий. Если капля при падении соприкасается с отрезком-препятствием, то она стекает по отрезку вниз, пока не упадет вертикально вниз с меньшего по высоте конца отрезка.
Входные данные
Во входном файле в первой строке содержатся два целых числа через пробел – координата $X$$0$ точки появления капли $(0 < X$$0$ $< 10000)$ и количество отрезков-препятствий $N (0 ≤ N ≤ 100)$. Далее следует $N$ строк, каждая из которых содержит четыре разделенные пробелами числа $x$$1$, $y$$1$, $x$$2$, $y$$2$ – координаты левого и правого концов отрезка-препятствия (все числа целые и находятся в диапазоне от $0$ до $10000$, $x$$1$ $ < x$$2$, $y$$1$ $≠$ $y$$2$$)$. Отрезки не пересекаются и не соприкасаются.
Выходные данные
В выходной файл вывести одно целое число – координату $X$ точки соприкосновения капли с землей.
//высота соприкосновения капли с крышей [ур-ние прямой по 2-м точкам]
doublef(slidex,doublex0){
doubledx=x.x2-x.x1;
doubledy=x.y2-x.y1;
return((dy*(x0-x.x1))/dx+x.y1);
}
vector<slide>roof;//вектор всех крыш
//считывание и заполнение данных
voidread(intn){
while(n--){
doublea,b,c,d;
slidex;
cin>>a>>b>>c>>d;
if(a<c){
x.x1=a;
x.y1=b;
x.x2=c;
x.y2=d;
}
else
{
x.x1=c;
x.y1=d;
x.x2=a;
x.y2=b;
}
roof.push_back(x);
}
}
intmain(){
intn,x,y=MAX_Y+1;
slidea;
cin>>x>>n;
if(n==0){
cout<<x;
return0;
}
read(n);
while(roof.size()){
intindex=-1;
intvalue=-1;//предполагаемая высока соприкосновения капли со следующей крышей
boolno_projection=true;
for(inti=0;i<roof.size();i++){//поиск самой высокой крыши в точке х
if((x<=roof[i].x2)and(x>=roof[i].x1)){//капля проектируется на и-тую крышу?
no_projection=false;
if((f(roof[i],x)>value)and(f(roof[i],x)<y)){//и-тая крыша выше ранее найденной?
value=f(roof[i],x);
index=i;
}
}
if(min(roof[i].y1,roof[i].y2)>y){//крыша целиком осталась выше?
roof.erase(roof.begin()+i);
i--;
}
}
if((roof.size()==0)or(no_projection)){//если удалили все крыши или свободно падает на землю
cout<<x;
return0;
}
if(roof[index].y1<roof[index].y2)//какой конец крыши ниже?
x=roof[index].x1;
else
x=roof[index].x2;
y=min(roof[index].y1,roof[index].y2);//сохранили новую ординату
roof.erase(roof.begin()+index);
}
cout<<x;
return0;
}
Решение
Для удобства создадим структуру slide, которая будет описывать координаты концов отрезка-крыши. Также будем считать, что первый конец отрезка находится левее (для этого будем менять местами точки в случае необходимости).
Будем представлять каждую крышу как отрезок прямой на плоскости. Для этого применим уравнение прямой по двум точкам, принадлежащим этой прямой:
[latex]\frac{x — x_1}{x_2 — x1}=\frac{y — y_1}{y_2 — y_1}[/latex]
Чтобы проверить, может ли капля в текущий момент проектироваться на некоторую крышу, надо проверить, находится ли абсцисса капли между абсциссами концов отрезка-крыши, а также найти ту крышу, которая в абсциссе капли «выше всех» (другими словами, у какой из прямых, которым принадлежат те отрезки, на которые проектируется капля, наибольшее значение ординаты в абсциссе капли). Для этого создадим функцию, которая и будет возвращать искомое значение ординаты. Также важно убедиться в том, что эта крыша находится ниже текущего положения капли. Заметим, что если некоторая крыша целиком находится выше капли, то мы на неё уже никогда не попадем, поэтому её нужно удалить из вектора. Найдя нужную крышу, определим новые координаты капли после того, как она скатится по этой крыше. Если капля в свободном падении и на её пути больше нет препятствий (крыш не осталось или нет такой, на которую проектируется капля), то текущая абсцисса капли и будет ответом на задачу.
Троечник Серёжа часто просит отличника Васю сделать ему домашнее задание. Так как при всей гениальности Васи он всё же не может справиться с работой мгновенно, то Серёже приходится ждать. Серёже скучно ждать долго без дела. Не так давно он придумал новую игру, чтобы скоротать время.
На белый стол с привязанной к нему системой координат Серёжа кладёт прямоугольный лист чёрной бумаги. Сверху на него кладёт прямоугольный лист белой бумаги, так что тот возможно перекрывает часть чёрного листа. Стороны обеих листов бумаги параллельны осям координат. После этого мальчик выбирает точку на плоскости стола. Если она попадает на чёрный лист, Серёжа считает, что ожидание проходит не скучно, иначе он расстраивается.
Помогите Серёже понять, расстроится он или нет.
Входные данные
Сначала с клавиатуры вводятся координаты левого верхнего угла чёрного прямоугольника, затем правого нижнего, затем координаты углов белого прямоугольника в том же формате и в конце — координаты точки. Все координаты — целые числа, по модулю не превышающие $10000$.
Выходные данные
Программа должна выводить слово «SAD», если Серёжа расстроится (когда точка попадает на границу Серёжа считает её принадлежащей чёрному листу, потому что не любит расстраиваться), и «HAPPY» — в обратном случае.
По условию задачи необходимо проверить находится ли точка внутри или на краю черного прямоугольника и при этом не находится ли она внутри белого прямоугольника. Это можно проверить при помощи условных выражений, а именно, зная, что, первая точка, задающая прямоугольник, находится сверху слева, а вторая снизу справа необходимо просто сравнить с их соотвествующими координатами координаты заданной точки. При этом для черного прямоугольника неравенства при проверке нестрогие, а для белого прямоугольника неравенства строгие.
Василий и Петр игрались на уроке. На прямоугольном листке бумаги в клеточку Василий по линях сетки рисует отрезок, параллельный одной из сторон листка, и рамку прямоугольной формы. Он шепчет на ухо Петру координаты концов отрезка и координаты двух противоположных углов рамки, а Петр старается быстро определить длину части отрезка, оказавшуюся внутри рамки. У него это плохо получалось, и он написал программу, которая это делала всегда правильно. Напишите её и вы.
Входные данные
Заданы через пробел $8$ чисел — координаты начала и конца отрезка и координаты противоположных углов рамки. Координаты — целые числа, не превышающие по модулю $35000$.
Выходные данные
Вывести одно число — длину части отрезка, которая оказалась внутри рамки.
Так как отрезок параллелен одной из сторон листка, то абсциссы (или ординаты) концов отрезка должны совпадать. Будем рассматривать случай когда они находятся между абсциссами (или ординатами соответственно) соответствующих вершин прямоугольника (в противном случае отрезок не проходит через рамку и ответ 0).
Если абсцисса левого или правого конца отрезка будет находиться, соответственно, правее крайней справа или левее крайней слева абсциссы вершины прямоугольника, то отрезок не проходит через рамку (для ординат аналогично).
В противном случае, отрезок проходит через рамку и мы можем подсчитать какая его часть находится внутри рамки. Для этого необходимо найти разность между абсциссами (ординатами) концов части отрезка находящийся внутри прямоугольника. Абсциссой левого конца такого отрезка будет максимальная из абсцисс левого конца изначального отрезка и крайней слева абсциссы прямоугольника, абсциссой правого конца такого отрезка будет минимальная из абсцисс правого конца изначального отрезка и крайней справа абсциссы прямоугольника (для ординат аналогично).
Обозначим искомую длину как $ans$, тогда $ans = min(x_{2}, x_{4})-max(x_{1}, x_{3})$.
Для ординат $ans = min(y_{2}, y_{4})-max(y_{1}, y_{3})$.
Входные данные:
Каждая строка является отдельным тестом и содержит одно целое число — длину стороны квадрата $n$ (1 $\leqslant$ $n$ $\leqslant$ 1000).
Выходные данные:
Для каждого теста выведите в одной строке периметр и площадь квадрата.
Тесты
№
Входные данные
Выходные данные
1
3
5
10
12 9
20 25
40 100
2
3
3
3
12 9
12 9
12 9
3
1000
1
500
4000 1000000
4 1
2000 250000
Код
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
usingnamespacestd;
intmain(){
intn,P,S;
while(cin>>n){
P=4*n;// считаем периметр квадрата
S=n*n;// считаем площадь квадрата
cout<<P<<" "<<S<<"\n";
}
return0;
}
Решение
У нас дана сторона квадрата $n$.
Находим периметр квадрата, используя формулу $P = 4n$.
Находим площадь квадрата, используя формулу $S = n^{2}$.
Так как каждая новая строка — новое значение для стороны квадрата и таких строк неизвестное количество то используем
while(cin>>n) для потоковой обработки данных.
Король страны Геометрии в заботах. У него есть три сына, которые постоянно ссорятся. Король применял разные методы примерения, но все напрасно. И это его очень беспокоило.
«А что если разделить королевство?» подумал король. Он пригласил советников и описал свой план. Король открыл карту.
Королевство имеет форму треугольника с вершинами [latex]A, B, C[/latex]. Король провел линию от [latex]B[/latex] к [latex]E[/latex] ([latex]E[/latex] — произвольная точка на отрезке [latex]AC[/latex]) и линию от [latex]C[/latex] к [latex]F [/latex]([latex]F[/latex] — произвольная точка на отрезке [latex]AB[/latex]). Пересечение [latex]BE[/latex] и [latex]CF[/latex] обозначено через [latex]X[/latex].
Теперь образовалось четыре части — [latex]a[/latex] (треугольник [latex]BFX[/latex]), [latex]b[/latex] (треугольник [latex]BCX[/latex]), [latex]c[/latex] (треугольник [latex]CEX[/latex]) и [latex]d[/latex] (четырехугольник [latex]AEXF[/latex]). Король решил отдать области[latex] a[/latex], [latex]b[/latex], [latex]c[/latex] трем сыновьям. А область [latex]d[/latex] станет новым королевством.
Вы — главный советник. Король сообщает Вам значения [latex]a, b, c[/latex]. Вам необходимо найти значение [latex]d[/latex]. Если его найти невозможно, то сообщить об этом.
Входные данные
Состоит из не более чем [latex]1000[/latex] тестов. Каждый тест содержит три неотрицательных действительных числа [latex]a[/latex], [latex]b[/latex], [latex]c[/latex] (разделенных пробелом). Входные данные заканчиваются тестом у которого [latex]a = -1[/latex] и он не обрабатывается.
Выходные данные
Для каждого теста вывести его номер, начиная с [latex]1[/latex]. В следующей строке вывести [latex]d[/latex] (величина области королевства после раздела) округленное до [latex]4[/latex] десятичных знаков или ‘Poor King!’ (без кавычек) если значение [latex]d[/latex] определить невозможно. Формат выходных данных показан в примере.
Для решения задачи соединим точки [latex]F[/latex] и [latex]E[/latex] линией. Получили два треугольника: [latex]d1[/latex] и [latex]d2[/latex]. Искомую площадь [latex]d[/latex] будем искать как сумму площадей [latex]d1[/latex] и [latex]d2[/latex]. Треугольники [latex]BFO[/latex] и [latex]EFO[/latex] имеют общее основание [latex]FO[/latex]. Следовательно их площади [latex]d1[/latex] и [latex]a[/latex] относятся как высоты, опущенные из вершин [latex]E[/latex] и [latex]B[/latex] на прямую [latex]FO[/latex]. Аналогично треугольники [latex]BCO[/latex] и [latex]ECO[/latex] имеют общее основание [latex]OF[/latex]. Значит их площади [latex]c[/latex] и [latex]b[/latex] относятся как высоты, опущенные из вершин [latex]E[/latex] и [latex]B[/latex] на прямую [latex]CO[/latex]. То есть $\frac{d_1}{a}=\frac{c}{b}$. Отсюда $d_1=\frac{ac}{b}$. Теперь рассмотрим треугольники [latex]CAF[/latex] и [latex]CBF[/latex] с основаниями [latex]AF[/latex] и [latex]BF[/latex]. Они имеют одинаковую высоту, опущенную из вершины [latex]С[/latex] на прямую [latex]AB[/latex]. Следовательно площади этих треугольников относятся как длины сторон [latex]AF[/latex] и [latex]BF[/latex]. Аналогично треугольники [latex]EAF[/latex] и [latex]EBF[/latex] имеют основания [latex]AF[/latex] и [latex]BF[/latex]. Они имеют одинаковую высоту, опущенную из вершины [latex]E[/latex] на прямую [latex]AB[/latex]. Площади этих треугольников относятся как длины сторон [latex]AF[/latex] и [latex]BF[/latex]. Тогда $$\frac{AF}{BF}=\frac{S_{\blacktriangle} CAF}{S\blacktriangle CBF}=\frac{c+d_1+d_2}{a+b}$$. $$\frac{AF}{BF}=\frac{S\blacktriangle EAF}{S\blacktriangle EBF}=\frac{d_2}{a+d_1}$$. Следовательно $\frac{c+d_1+d_2}{a+b}=\frac{d_2}{a+d_1}$. Поскольку [latex]d1[/latex] уже найдено, то имеем равенство с одним неизвестным [latex]d2[/latex] : $$d_2=\frac{(c+d_1)(a+d_1)}{b-d_1}$$. Если [latex]b \leqslant d1[/latex], то решения не существует.
После окончания второго тура олимпиады по программированию участники олимпиады решили отметить это событие. Для этой цели был заказан один большой торт прямоугольной формы. При этом стол, вокруг которого собрались участники был круглым. Естественно, у них возник вопрос, поместиться ли прямоугольный торт на круглом столе так, чтобы ни одна часть торта не выходила за пределы стола. Вам необходимо дать ответ на этот вопрос, зная размеры торта и радиус стола.
Входные данные
Содержит три натуральных числа: радиус стола [latex]r \left(1\leqslant r\leqslant 1000 \right)[/latex], ширину [latex]w[/latex] и длину [latex]l[/latex] торта [latex] \left(1\leqslant w \leqslant l \leqslant 1000\right)[/latex].
Выходные данные
Вывести слово [latex]YES[/latex], если торт помещается на стол, и слово [latex]NO[/latex] в противном случае.
Тесты
№
Входные данные
Выходные данные
1
38 40 60
YES
2
35 20 70
NO
3
50 60 80
YES
4
30 60 90
NO
Код программы
с ветвлением:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
usingnamespacestd;
intmain(){
intr,w,l;
cin>>r>>w>>l;
cout<<(w*w+l*l<=4*r*r?"YES":"NO");
return0;
}
без ветвления:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
usingnamespacestd;
boolmyBool(intx,inty,intz){
return(x*x+y*y<=4*z*z);
}
intmain(){
intr,w,l;
cin>>r>>w>>l;
myBool(w,l,r)&&cout<<"YES";
!myBool(w,l,r)&&cout<<"NO";
return0;
}
Решение задачи
Вписанный в окружность прямоугольник
Для того, чтобы узнать, помещается торт на столе или нет, необходимо найти диагональ прямоугольного торта. Зная длину и ширину прямоугольника, находим диагональ по теореме Пифагора. Если она равна или меньше диаметра стола $AB^2$ + $AD^2$ <= 4$OD^2$, значит торт помещается, и пишем "YES". Если диагональ больше диаметра стола, пишем "NO".
Целочисленные стороны прямоугольника $a$ и $b$ ($1 \leq a$, $b \leq 1000$).
Выходные данные
Выведите площадь прямоугольника.
Тесты
№
Входные данные
Выходные данные
1
3 4
12
2
5 12
60
3
1 1
1
4
1000 1000
1000000
Решение
Для нахождение площади прямоугольника воспользуемся формулой $S = a \cdot b$, где $a$ и $b$ — стороны данного прямоугольника, а $S$ — площадь прямоугольника.
Целочисленные стороны прямоугольника [latex]a[/latex] и [latex]b\left(1\leq a, b\leq 1000\right)[/latex]
Выходные данные
Выведите периметр прямоугольника.
Тесты
Входные данные
Выходные данные
1 1
4
1000 1000
4000
10 20
60
12 13
50
176 37
426
Решение
C++
1
2
3
4
5
6
7
8
9
#include <iostream>;
usingnamespacestd;
intmain(){
inta,b;
cin>>a>>b;
cout<<(a+b)*2;
return0;
}
Объяснение
Поскольку стороны прямоугольника, используемые в задаче, целочисленные, и каждое из них меньше [latex]1000[/latex] то переменные создаём типа
int. Для решения этой задачи воспользуемся формулой нахождения периметра прямоугольника: [latex] (a+b) \cdot 2 [/latex]
Как известно, простой многоугольник — это фигура, состоящая из не пересекающихся отрезков («сторон»), соединённых попарно с образованием замкнутого пути. По заданному простому многоугольнику и точке требуется определить, лежит ли эта точка внутри или на границе этого многоугольника или вне его.
Входные данные
В первой строке заданы три числа: [latex]n (3 \le n \le 10^5)[/latex] и координаты точки. Далее в $n$ строках заданы по паре чисел — координаты очередной вершины простого многоугольника в порядке обхода по или против часовой стрелки.
Выходные данные
Вывести строку «YES», если заданная точка содержится в приведённом многоугольнике или на его границе, и «NO» в противном случае.
Тесты
Входные данные
Выходные данные
3 0 0
1 0
0 1
1 1
NO
4 3 2
0 0
1 5
5 5
6 0
YES
3 5 6
2 3
8 0
-1 -3
NO
4 -2 3
0 0
5 0
0 6
3 3
NO
5 3 1
9 2
3 0
-2 -4
-4 0
-4 5
YES
Код программы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
usingnamespacestd;
structpoint{
intx;
inty;
};
intf(point*p,intN,intx,inty){
inti1,i2,n,S,S1,S2,S3,flag;
for(n=0;n<N;n++){
flag=0;
i1=n<N-1?n+1:0;
while(flag==0){
i2=i1+1;
if(i2>=N)
i2=0;
if(i2==(n<N-1?n+1:0))
break;
S=abs(p[i1].x*(p[i2].y-p[n].y)+
p[i2].x*(p[n].y-p[i1].y)+
p[n].x*(p[i1].y-p[i2].y));
S1=abs(p[i1].x*(p[i2].y-y)+
p[i2].x*(y-p[i1].y)+
x*(p[i1].y-p[i2].y));
S2=abs(p[n].x*(p[i2].y-y)+
p[i2].x*(y-p[n].y)+
x*(p[n].y-p[i2].y));
S3=abs(p[i1].x*(p[n].y-y)+
p[n].x*(y-p[i1].y)+
x*(p[i1].y-p[n].y));
if(S==S1+S2+S3){
flag=1;
break;
}
i1++;
if(i1>=N)
i1=0;
}
if(flag==0)
break;
}
returnflag;
}
intmain(){
intn,x,y;
cin>>n>>x>>y;
point*p=newpoint[n];
for(inti=0;i<n;i++)
cin>>p[i].x>>p[i].y;
cout<<(f(p,n,x,y)?"YES":"NO");
return0;
}
Решение
Задача сводится к поиску площадей. Считаю площадь треугольника, образующегося тремя последовательными точками многоугольника. Далее считаю площади треугольников которые заданная точка образует с каждой парой точек из этой пары. Если площадь первого треугольника равна сумме площадей этих, то точка находится в треугольнике, а следовательно и в многоугольнике. Если нет перехожу к следующей тройке точек. Если точка не принадлежит ни одному треугольнику, то точка находится вне многоугольника.
Для графического изображения соотношения между различного рода величинами во многих областях человеческой деятельности используются различные графики и диаграммы. Одним из типов диаграмм является так называемая круговая диаграмма.
Исходными данными для этой диаграммы является набор чисел $a_1,\ldots, a_n, а$ диаграмма представляет собой круг радиуса $r$, разделенный на секторы. При этом каждому из чисел соответствует ровно один сектор, площадь которого пропорциональна этому числу. Общая площадь секторов равна площади круга.
Ваша задача состоит в том, чтобы по набору чисел и по радиусу круга определить площадь каждого из секторов круговой диаграммы.
Входные данные
Первая строка содержит два целых числа $n$ и $r \space (1 \leq n, r \leq 100)$. Вторая строка содержит $n$ целых чисел $a_1,\ldots, a_n \space (1 \leq a_i \leq 100$ для всех $i$ от $1$ до $n)$.
Выходные данные
Выведите $n$ вещественных чисел — площади секторов, соответствующих числам $a_1,\ldots, a_n$. Выводите каждое из чисел в отдельной строке.
Все эти числа должны быть выведены с точностью не хуже $10^{-6}$.
Найдем сперва сумму всех чисел $a_i$ и площадь диаграммы (по известной формуле площади круга). Теперь можем легко посчитать площади каждого из секторов нашей диаграммы, разделив площадь последней на ранее найденную сумму и умножив их частное на соответствующее число $a_i$.
По заданным длинам трех отрезков определить, можно ли из них составить невырожденный треугольник. Треугольник называется невырожденным, если его площадь больше 0.
Входные данные
Три натуральных числа $a, b, c (1 ≤ a, b, c ≤ 1000)$ — длины трех отрезков.
Выходные данные
Вывести YES если из отрезков можно составить невырожденный треугольник и NO в противном случае.
Тесты
#
ВХОДНЫЕ ДАННЫЕ
ВЫХОДНЫЕ ДАННЫЕ
1
5 6 7
YES
2
3 7 4
NO
3
16 24 32
YES
4
54 1 100
NO
5
1 1 1
YES
Код программы (Ветвление)
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
usingnamespacestd;
intmain(){
inta,b,c;
cin>>a>>b>>c;
cout<<(a<b+c&&b<a+c&&c<a+b?"YES":"NO");
return0;
}
Код программы (Линейные вычисления)
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
usingnamespacestd;
intmain(){
inta,b,c;
cin>>a>>b>>c;
boolcondition=(a<b+c&&b<a+c&&c<a+b);
cout<<(char)(condition*'Y'+!condition*'N')
<<(char)(condition*'E'+!condition*'O')
<<(char)(condition*'S'+!condition*' ');
return0;
}
Решение задачи
Пусть $a, b, c$ – длины трех отрезков. Из них можно составить невырожденный треугольник, если длина каждых двух отрезков больше длины третьего (это условие известно как неравенство треугольника): | $b$ | < | $a$ | + | $c$ | \begin{cases} b + c > a\\a + c > b\\a + b > c\end{cases}
Лаурел и Харди — два известных киногероя $50$-ых. Они известны своей разницей в весе, как можно увидеть на картинке. Если Вы еще не разобрались, кто из них кто, то я добавлю, что Лаурел легче. В свои юношеские годы Лаурел и Харди любили играть со странными качелями, и когда качели находились в равновесии, то Харди всегда был у земли. Мы рассмотрим двумерную версию качель.
Качели, которыми пользовались Лаурел и Харди, представляют собой часть окружности радиуса $r$, как показано на картинке (они закрашены серым и имеют вид буквы $D$). Харди сел на точку $B$ (самая правая точка качель), а Лаурел сел на точку $A$ (самая левая точка отрезка $AB$). $d = EF$ — расстояние между центром отрезка $AB$ и дуги $AFB$. То есть $E$ — середина отрезка $AB$, а $F$ — середина дуги $AFB$. $MN$ — основа качель, является горизонтальной прямой. $BD = h_1$ — расстояние от Харди до земли. Вам необходимо найти расстояние от Лаурела до земли (обозначаемое $h_2 = AC$).
Входные данные
Первая строка содержит количество тестов $N \space (0 < N ≤ 1000)$. Каждая из следующих $N$ строк представляет собой отдельный тест, который имеет следующий формат:
Каждая строка содержит три целых числа $r \space (10 ≤ r ≤ 100), \space$ $d \space (5 ≤ d ≤ r), \space$ $h_1 \space (5 ≤ h_1 ≤ d)$. Значение этих чисел приведено выше.
Выходные данные
Для каждого теста в отдельной строке вывести его номер и действительной число — значение $h_2$. Это число должно содержать четыре десятичных знака. Формат вывода приведен в примере.
Тесты
Входные данные
Выходные данные
2
10 10 10
10 7 6
Case 1: 10.0000
Case 2: 8.0342
3
12 7 7
11 11 8
54 12 6
Case 1: 7.0000
Case 2: 14.0000
Case 3: 19.7383
5
94 21 12
23 9 8
5 4 3
2 2 1
43 26 20
Case 1: 32.1226
Case 2: 10.0439
Case 3: 5.0440
Case 4: 3.0000
Case 5: 32.4231
Код программы
e-olymp 1507. История Лаурела-Харди
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <iomanip>
#include <cmath>
usingnamespacestd;
intmain(){
unsignedshortN;
doubler,d,h_1,a,b;
cin>>N;
for(inti=1;i<=N;i++){
cin>>r>>d>>h_1;
cout<<"Case "<<i<<": ";
a=asin((r-h_1)/r)-asin((r-d)/r);
if(a==0)
cout<<fixed<<setprecision(4)<<h_1<<endl;
else{
b=2*sqrt(r*r-(r-d)*(r-d))+h_1/sin(a);
cout<<fixed<<setprecision(4)<<b*sin(a)<<endl;
}
}
return0;
}
Решение
Для лучшего понимания решения данной задачи, я построил к ней чертеж, который вы можете видеть сверху. Но прежде чем приступить непосредственно к объяснению решения, я хотел бы обратить внимание на то, что мой рисунок (даже без дополнительных построений) немного отличается от данного нам в условии. Эти различия преднамеренны и метод решения справедлив для обоих рисунков.
В $9$ строке введем число $N$ из входного потока, а в $10$ — запустим цикл, который будет работать $N$ раз. Далее за каждый проход цикла будем читать по $3$ следующих числа из входного потока и выводить на экран номер текущего теста. Перед тем, как идти дальше, разберемся в рисунке. Так как по условию отрезок $EF$ делит сегмент $AFB$ пополам, то по свойствам хорд и дуг окружности, он является частью радиуса $r$ нашей окружности с центром в точке $O$ и перпендикулярен хорде $AB$, что и показано на чертеже. Кроме того, я дорисовал радиусы $OA$ и $OB$ окружности к соответствующим точкам и начертил отрезок $BH$, как продолжение $AB$, от точки $B$ до прямой $MN$. Также, я построил прямоугольный треугольник $\triangle OGB$, в котором катет $OG = r-BD$.
Достроив все необходимые отрезки, легко заметить, что мы имеем прямоугольный треугольник $\triangle ACH$ с катетом $AC$, длину которого нам и нужно найти по условию задачи. Предлагаю сделать это, воспользовавшись формулой $AC = AH \cdot \sin(\angle AHC)$. Найдем значения сомножителей.
Из рисунка очевидно, что $\angle AHC = \angle BHD = \angle EBG = \angle OBG-\angle OBE.$
Сначала найдем $\angle OBG$. Для этого рассмотрим треугольник $\triangle OGB$. Длины его гипотенузы и противолежащего к искомому углу катета нам уже известны, так что можем сразу найти $\angle OBG = \arcsin \frac{OG}{OB}$.
Теперь найдем $\angle OBE$. Рассмотрим прямоугольный треугольник $\triangle OEB$. В нем противолежащий искомому углу катет $OE = r-d$, а гипотенуза $OB = r$. Значит, $\angle OBE = \arcsin \frac{OE}{OB}$.
В итоге остаётся только найти разницу этих углов, которая и будет являться величиной искомого $\angle AHC$. В коде же значение этого угла считается в $13$ строке и присваивается переменной
a.
Стоит заметить, что если $\angle OBG-\angle OBE = 0$, то длины отрезков $AC$ и $BD$, очевидно, совпадают. В таком случае можем сразу вывести на экран $h_2 = h_1$, как мы и поступили в $15$ строке, и перейти к нахождению $AC$ уже для следующего тестового случая.
Если же величина $\angle AHC$ отлична от $0$, то нам все еще предстоит посчитать длину гипотенузы $AH$ треугольника $\triangle ACH$. Она состоит из хорды $AB$ и отрезка $BH$.
Сперва найдем длину хорды. Известно, что $OF$ делит ее на $2$ одинаковых по длине отрезка, значит, следует опять рассмотреть треугольник $\triangle OEB$. Длину его гипотенузы и одного из катетов мы уже находили, так что просто применим теорему Пифагора и найдем $EB = \sqrt{OB^2-OE^2}$. Тогда $AB = 2 \cdot EB$.
Для нахождения длины $BH$, рассмотрим треугольник $\triangle BDH$, в котором этот отрезок является гипотенузой. Длину катета $BD$ и величину угла $\angle BHD$ мы уже знаем, значит, можем применить формулу $BH = \frac{BD}{\sin(\angle BHD)}$.
Сложим найденные значения длин хорды $AB$ и отрезка $BH$, чтобы получить $AH$. В коде эта длина находится в $17$ строке и присваивается переменной
b.
Теперь остается только подставить найденные значения в ранее приведенную формулу и получить наконец длину $h_2$, которую выведем на экран в $18$ строке.
Готовя обед для Анфисы — символа 2008 года, хозяин использовал для разрезания сыра специальный нож, который разрезал сыр на одинаковые прямоугольные паралелепипеды с основанием в виде квадрата со стороной [latex]a[/latex] и высотой [latex]b[/latex].
Но Анфиса, как и подобает даме года, любила употреблять сыр несколько меньших размеров, для чего она всегда разрезала предложенный кусочек деликатеса на две части, предварительно установив его строго вертикально квадратом к столу. При разрезании нож всегда размещался по диагонали квадрата, но Анфисе не всегда удавалось разрезать кусочек пополам, так как плоскость лезвия ножа образовывала двугранный угол [latex]z^o[/latex] с плоскостью основания.
Найти площадь [latex]s[/latex] созданного Анфисой сечения.
Входные данные
Целые числа [latex]a[/latex], [latex]b[/latex], [latex]z[/latex], не превышающие [latex]90^o[/latex].
Выходные данные
Площадь [latex]s[/latex] образованного сечения с точностью до трех десятичных знаков.
Для решения данной задачи нам нужно рассмотреть 4 случая:
1) Если [latex]\cot[/latex] заданного угла не будет превышать [latex]\frac{a} {\sqrt{2} \cdot b}[/latex] и также не будет равен [latex]0^o[/latex] и [latex]90^o[/latex], то фигурой сечения получится треугольник. Его площадь мы сможем найти по формуле [latex]s = \frac {a^{2}} {2 \cos (z \cdot \frac {\pi} {180})}[/latex].
2) Заданный угол = [latex]0^o[/latex], следовательно площадь сечения также будет = 0, так как сыр нормально и не порежут.
3) Заданный угол = [latex]90^o[/latex], фигурой сечения будет прямоугольник, площадь которого мы сможем найти по формуле [latex]s = a \cdot b \cdot \sqrt{2}[/latex].
4) В любом другом случае, получится трапеция, площадь которой мы найдем по формуле [latex]s = \frac {a \cdot \sqrt{2} — b \cdot 1} {tan(z \cdot \frac{\pi}{180})} \cdot \frac {b} {sin (z \cdot \frac {\pi}{180})}[/latex].
Уезжая из дома, поэт оставлял коту, прикованному к дубу цепью длиной $l$, $n$ рыбин. Зная координаты головы и хвоста каждой из них, подсчитайте, на какие сутки у кота визникнет чувство голода, если оно возникает тогда, когда за сутки он съест меньше, чем $k$ рыбин. Рыбину он может съесть, если сможет дотянуться хотя бы к одной её точке. Координаты дуба $(0, 0)$.
Входные данные
В первой строке находятся числа $l$, $n$, $k$. Далее идет $n$ строк: координаты головы $(x_{1i}, y_{1i})$ и хвоста $(x_{2i}, y_{2i})$ каждой рыбины. Все входные данные — целые числа, не превышающие по модулю $100$.
Выходные данные
Вывести день, на который у кота появится чувство голода.
Для каждой рыбы мы будем делать такой процесс.
Для начала проверим расстояния от начала координат до каждого из концов рыбы. Если хотя бы одно из них меньше либо равно длине цепи, то кот сможет съесть эту рыбу и ничего больше проверять не надо. Если же эти расстояния больше длины цепи поступим так. Найдем уравнение прямой проходящей через две точки (координаты начала и конца рыбы). Оно имеет вид: $$\frac{x-x_1}{x_2-x_1}=\frac{y-y_1}{y_2-y_1}$$ Приведем его к виду $ax+by+c=0$. Получим, что $a=y_2-y_1$, $b=-(x_2-x_1)$, $c=y_1(x_2-x_1)-x_1(y_2-y_1)$. Теперь проверим длину перпендикуляра к этой прямой от начала координат (т. к. если длина перпендикуляра больше длины цепи, кот точно не дотянется до рыбы). Расстояние $d$ от точки $(0,0)$ до прямой $ax+by+c=0$ посчитаем по формуле: $$d=\frac{a\cdot 0+b\cdot 0+c}{\sqrt{a^2+b^2}}$$ Избавляясь от корня и деления, получим условие: $$c^2\leq l^2(a^2+b^2)$$ (где $l$ — длина цепи). Если это условие выполняется, остается проверить, что точка пересечения перпендикуляра и прямой лежит между началом и концом рыбы (нам достаточно проверить по одной из координат, например по второй). Прямая, перпендикулярная исходной и проходящая через точку $(0,0)$, будет иметь вид: $$\frac{x}{a}=\frac{y}{b}$$ (т. к. $(a,b)$ — нормальный вектор к прямой, проходящей через начало и конец рыбы). Получаем систему из двух уравнений и двух неизвестных. Решая эту систему, получаем, что вторая координата точки пересечения равна: $$y=\frac{-cb}{a^2+b^2}$$ Теперь проверяем, лежит ли эта координата, между вторыми координатами начала и конца рыбы. Если да, то кот сможет съесть эту рыбу, иначе — нет.
Ответом на задачу будет $\left \lfloor\frac{count}{k}\right \rfloor+1$, где $count$ — количество рыб, до которых смог дотянуться кот, $k$ — минимальное количество рыб, которое кот должен съесть в сутки.
Заданы размеры прямоугольной двери [latex]a[/latex], [latex]b[/latex] и размеры шкафа, который имеет форму прямоугольного параллелепипеда [latex]x[/latex], [latex]y[/latex], [latex]z[/latex]. Можно ли пронести шкаф сквозь дверь, если проносить его разрешается так, чтобы каждое ребро шкафа было параллельно или перпендикулярно стороне двери.
Входные данные
Пять действительных чисел [latex]a[/latex], [latex]b[/latex], [latex]x[/latex], [latex]y[/latex], [latex]z[/latex] ( [latex] 0\;\lt\;a,\;b,\;x,\;y,\;z\;\lt\;10[/latex] ).
Выходные данные
Вывести [latex]1[/latex], если шкаф можно свободно пронести сквозь дверь и [latex]0[/latex] в противоположном случае.
Тесты
Входные данные
Выходные данные
[latex]5\;7\;4\;6\;8[/latex]
[latex]1[/latex]
[latex]1\;4\;2\;3\;6[/latex]
[latex]0[/latex]
[latex]2.9\;6.7\;5.1\;3.7\;1.0[/latex]
[latex]1[/latex]
[latex]4\;6\;6\;4\;3[/latex]
[latex]1[/latex]
[latex]1.5\;8\;9.9\;2\;7.5[/latex]
[latex]0[/latex]
[latex]2\;2\;2\;2\;2[/latex]
[latex]0[/latex]
[latex]2\;3\;7\;8\;8[/latex]
[latex]0[/latex]
[latex]5\;6\;2\;4\;3.5[/latex]
[latex]1[/latex]
Код программы
Новый шкаф
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
usingnamespacestd;
intmain(){
// Новый шкаф
doublea,b,x,y,z;
cin>>a>>b>>x>>y>>z;
if((x<a&&y<b)||(y<a&&x<b)||(y<a&&z<b)||
(z<a&&y<b)||(x<a&&z<b)||(z<a&&x<b)){
cout<<1;
}else{
cout<<0;
}
return0;
}
Решение
Шкаф можно пронести через дверь тогда и только тогда, когда ширина и высота его грани, параллельной дверному проему, меньше ширины и высоты двери.
Имеем шесть возможных вариантов ширины и высоты грани шкафа — [latex](x,y)[/latex], [latex](y,x)[/latex], [latex](y,z)[/latex], [latex](z,y)[/latex], [latex](x,z)[/latex], [latex](z,x)[/latex]
Сравнивая их с размерами двери определяем, можно ли пронести шкаф сквозь дверь.
На границе окружности с центром в начале координат и радиусом $r$ заданы $n$ различных точек. Поскольку все точки расположены на одной окружности, то любые три из них не коллинеарны, и поэтому образуют треугольник. Вам необходимо вычислить суммарную площадь всех этих $C_{n}^3$ треугольников.
Входные данные Состоит из не более чем $16$ тестов. Каждый тест начинается двумя целыми числами $n \left(0 ≤ n ≤ 500\right)$ и $r \left(0 < r ≤ 100\right)$. Через $n$ обозначено количество точек, а через $r$ радиус окружности. Центр окружности находится в центре координат. Дальше следуют $n$ строк, каждая из которых содержит действительное число $θ \left(0 ≤ θ < 360 \right)$, которое определяет угол в градусах между точкой и направлением $x$-оси. Например, если $θ$ равно $30$ градусов, то соответствующая точка имеет декартовы координаты $\left(r \cdot \cos(30°), r \cdot \sin(30°) \right)$. Последняя строка содержит $n = r = 0$ и не обрабатывается.
Выходные данные Для каждого теста в отдельной строке вывести целое число — суммарную площадь (округленную до ближайшего целого) всех возможных треугольников, образованных заданными $n$ точками.
Тесты
Входные данные
Выходные данные
5 10
10
100
300
310
320
3 20
10
100
300
0 0
286
320
3 5
25
176
243
0 0
25
4 20
30
80
130
330
0 0
822
2 7
30
230
0 0
0
Код программы
e-olymp 1503 C++ solution
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <algorithm>
#include <math.h>
#include <stdio.h>
usingnamespacestd;
intmain(){
doubleang,s,sq,r2,res,M[500];
intn,r,pts;
while(cin>>n>>r,n+r!=0){
for(inti=0;i<n;i++){
cin>>M[i];
M[i]=M[i]*M_PI/180;
}
sort(M,M+n);
res=M_PI*r*r*n*(n-1)*(n-2)/6;
r2=r*r/2.0;
sq=M_PI*r*r;
for(inti=0;i<n;i++){
for(intj=i+1;j<n;j++){
ang=M[j]-M[i];
if(ang<M_PI){
s=r2*(ang-sin(ang));
}else{
ang=2*M_PI-ang;
s=sq-r2*(ang-sin(ang));
}
pts=n-(j-i+1);
res=res-s*pts;
pts=n-2-pts;
res=res-(sq-s)*pts;
}
}
printf("%.f\n",res);
}
return0;
}
Решение задачи
Радианная мера точек заносится в массив, после чего массив сортируется по возрастанию с помощью функции
sort().
В переменную
res изначально заносится площадь, равная площади кругов радиуса $r$,
то есть значение $C_{n}^3 \cdot \pi \cdot r^2 = n(n-1)(n-2)(n-2)\pi \cdot \frac{r^2} {6}$. Значение $\frac{r^2} {2}$ присваивается переменной
r2, а
sq – площадь одного круга, то есть $\pi \cdot r^2$.
Перебираются пары точек, а затем вычисляется угол.
Если угол меньше, то проходимся по меньшему сегменту, площадь которого равна $\pi r^2-0.5r^2(\alpha-\sin \alpha)$, $\alpha = 2\pi -\alpha$. В ином случае мы проходим по большему сегменту.
В любом случае переменной
s присваивается площадь сегмента, который мы проходим от $P_{i}$ к $P_{j}$ при движении против часовой стрелки.
Количество точек, лежащих на сегменте, равно $n-(j-i+1)$.
Значит, из переменной
res необходимо вычесть площадь сегмента
s такое количество раз, которому равно количество точек, то есть
pts .
Количество точек, которые лежат на сегменте площади
s , равно $n-2- $
pts.
Площадь противоположного сегмента равна разности площади круга и сегмента. Для получения ответа вычитаем площадь противоположного сегмента из переменной
res такое количество раз, которое равно значению переменной
pts и выводим полученное значение.
Римская цифра [latex]I[/latex], стоявшая на полу комнаты в точке с координатами [latex]X_0[/latex], [latex]Y_0[/latex], [latex]0[/latex] не выдержала отношения к решению задачи «Римские цифры» и упала на пол. Поскольку нижний конец был прикреплен шарнирно, то он остался на месте, а верхний оказался в точке с координатами [latex]X_1[/latex], [latex]Y_1[/latex], [latex]0[/latex]. В комнате стояла строго вертикально бумажная картина. Зная координаты концов нижнего основания [latex]X_2[/latex], [latex]Y_2[/latex], [latex]0[/latex] и [latex]X_3[/latex], [latex]Y_3[/latex], [latex]0[/latex] и высоту картины [latex]H[/latex] найти длину «разрыва бумаги» на картине.
Входные данные
Во входной строке записано 9 чисел [latex]X_0, Y_0, X_1, Y_1, X_2, Y_2, X_3, Y_3, H[/latex]. Все входные данные — целые числа, модуль которых не превышает [latex]10^9[/latex].
Выходные данные
Программа выводит единственное число – искомую величину с точностью до [latex]0.001[/latex].
Эта задача интересна тем, что для ее решения необходимо смоделировать большое количество разнообразных взаиморасположений картины и буквы. Далее будут использоваться следующие обозначения: [latex]X_0[/latex]- основание буквы, [latex]X_1[/latex] — ее вершины, [latex]X_2[/latex] и [latex]X_3[/latex] — координаты основания картины, [latex]H[/latex] — высота картины.
1. [latex]X_0 X_1[/latex] и [latex]X_2 X_3[/latex] лежат на одной прямой
1.1. [latex]X_0[/latex] принадлежит [latex]X_2[/latex][latex]X_3[/latex]
1.1.1.1 [latex]X_0[/latex][latex]X_1[/latex] не превышает [latex]H[/latex]
В таком случае искомая величина — дуга [latex]O X1[/latex], равная [latex]\frac{1}{4} [/latex] длины окружности с радиусом, равным высоте буквы: [latex]O[/latex][latex]X_1[/latex] = [latex]\frac{П\times X_0 X_1}{2} [/latex]
1.1.1.2 [latex]X_0[/latex][latex]X_1[/latex] больше, чем [latex]H[/latex]
в таком случае нам необходимо найти дугу [latex]NX_1[/latex],для этого умножив радиус на величину центрального угла: [latex]NX_1[/latex] =[latex]X_0 X_1 \times \arcsin \frac {H}{X_0 X_1}[/latex]
1.1.2 [latex]X_1[/latex] не принадлежит [latex]X_2 X_3[/latex]
1.1.2.1.[latex]X_2[/latex] принадлежит [latex]X_0 X_1[/latex]
1.1.2.1.1. [latex]X_0 X_1[/latex] не превышает [latex]H[/latex]
В таком случае нам нужно найти дугу [latex]OM[/latex] по схожему с случаем 1.1.1.2 алгоритму: [latex]OM[/latex] = [latex]X_0 X_1 \times \arcsin \frac{X_0 X_3} {X_0 X_1} [/latex]
1.1.2.1.2. [latex]X_0[/latex][latex]X_1[/latex] больше [latex]H[/latex]
В таком случае искомая величина равна дуге [latex]MN[/latex]= [latex]X_0 X_1 \times (\arcsin \frac{H}{X_0 X_1} — \arccos \frac{X_0 X_3} {X_0 X_1}))
1.1.2.2. данный случай аналогичен предыдущему.Единственное различие заключается в том,что точки [latex]X_2[/latex] и [latex]X_3[/latex] меняются местами в формулах.
1.2 [latex]Х_0[/latex] не принадлежит [latex]X_2[/latex][latex]X_3[/latex]
В этом случае длина разрыва будет равна длине отрезка [latex]MN[/latex] либо высоте картины, если она окажется меньше вышеупомянутого отрезка.
Для того, чтобы не рассматривать случаи, в которых искомая величина равна нулю (все оставшиеся), при создании переменной, в которой будем хранить ответ, сразу приравняем ее к нулю.
Для того, чтобы точка [latex]M[/latex] принадлежала треугольнику, заданному точками [latex]D([/latex]$x_{1}$,$y_{1}$[latex]), [/latex] [latex]E([/latex]$x_{2}$,$y_{2}$[latex]), [/latex][latex]F([/latex]$x_{3}$,$y_{3}$[latex]), [/latex] необходимо, чтобы псевдоскалярное (косое) произведение соответствующих векторов было больше либо равно нулю или же меньше либо равно нуля. Пользуясь формулой для косого произведения, запишем произведения векторов.
[$\overline{DE}$,$\overline{MD}$]=($x_{1}$-$x_{0}$) $\cdot$ ($y_{2}$-$y_{1}$)-($x_{2}$-$x_{1}$) $\cdot$ ($y_{1}$-$y_{0}$)
[$\overline{EF}$,$\overline{ME}$]=($x_{2}$-$x_{0}$) $\cdot$ ($y_{3}$-$y_{2}$)-($x_{3}$-$x_{2}$) $\cdot$ ($y_{2}$-$y_{0}$)
[$\overline{FD}$,$\overline{MF}$]=($x_{3}$-$x_{0}$) $\cdot$ ($y_{1}$-$y_{3}$)-($x_{1}$-$x_{3}$) $\cdot$ ($y_{3}$-$y_{0}$)
Если [$\overline{DE}$,$\overline{MD}$], [$\overline{EF}$,$\overline{ME}$] и [$\overline{FD}$,$\overline{MF}$] больше либо равно нулю или же меньше либо равно нуля, то точка принадлежит треугольнику.
Целочисленные стороны прямоугольника [latex]a[/latex] и [latex]b[/latex] [latex](1 ≤ a, b ≤ 1000)[/latex].
Выходные данные
Выведите площадь прямоугольника.
Тесты
#
ВХОДНЫЕ ДАННЫЕ
ВЫХОДНЫЕ ДАННЫЕ
1
[latex]1[/latex] [latex]1[/latex]
[latex]1[/latex]
2
[latex]2[/latex] [latex]4[/latex]
[latex]8[/latex]
3
[latex]511[/latex] [latex]428[/latex]
[latex]218708[/latex]
4
[latex]5555[/latex] [latex]4444[/latex]
[latex]24686420[/latex]
5
[latex]11[/latex] [latex]11[/latex]
[latex]121[/latex]
Код программы
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
usingnamespacestd;
intmain()
{
inta,b;
cin>>a>>b;
cout<<a*b<<endl;
return0;
}
Решение задачи
Прямоугольником называется четырехугольник, у которого все углы равны. Все углы в прямоугольнике прямые, т.е. составляют [latex]90°[/latex]. Площадь прямоугольника равна произведению его сторон [latex](a, b)[/latex]. Следовательно формула решения задачи будет такой: [latex]a · b[/latex].