Задача. С помощью [latex]x_{ij}, i=1,2; j=1,…,n[/latex] — действительной матрицы на плоскости задано [latex]n[/latex] точек так, что [latex]x_{1j},x_{2j} [/latex] — координаты [latex]j [/latex]— точки. Точки попарно соединены отрезками. Найти длину наибольшего отрезка.
Тест
n | Матрица [latex]x_{ij}, i=1,2[/latex] | Длина наибольшего отрезка | Комментарий |
3 | 2 8 4
9 1 5 |
10 | Пройдено |
4 | 6 14 2 1
9 3 8 0 |
13.3417 | Пройдено |
5 | 1 8 4 3 7
2 9 5 0 11 |
11.7047 | Пройдено |
Код программы
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 |
class Point { public var x:Int; public var y:Int; public function new(x,y) { this.x = x; this.y = y; } } class Test { static function distance(a:Point, b:Point):Float{ return Math.sqrt((b.x-a.x)*(b.x-a.x) + (b.y - a.y)* (b.y - a.y)); } static function main() { var n = Std.parseInt(Sys.stdin().readLine()); var coords:Array<Array<Int>> = new Array<Array<Int>>(); var max:Float = 0; var curr:Float; for (i in 0...n){ for (j in 0...1) { coords[i][j] = Std.parseInt(Sys.stdin().readInt32()); } } var a:Point, b:Point; for (i in 0...n){ a = new Point(coords[0][i], coords[1][i]); b = i < n ? new Point(coords[0][i+1], coords[1][i+1]) : new Point(coords[0][0], coords[1][0]); curr = distance(a, b); if (max < curr) { max = curr; } } trace(max); } } |
Ход решения:
- Вводим матрицу построчно (не очень удобно).
- Находим длину наибольшего отрезка.
С помощью вложенных циклов мы находим длины всех отрезков по формуле
AB=(x2−x1)2+(y2−y1)2,A(x1,y1),B(x2,y2). - По алгоритму нахождения максимума находим длину наибольшего отрезка.
- Выводим матрицу.
- Выводим длину наибольшего отрезка.