Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Да се имплементира генеричка класа Cluster во која се чуваат елементи кои мора да обезбедат сопствен идентификатор long и да може да се пресметува растојание (double) помеѓу два вакви елементи. Во класата да се имплементираат следните два методи:
- void addItem(Т element) - за додавање нов елемент во кластерот
- void near(long id, int top) - кој ги печати најблиските top елементи до елементот со дадениот идентификатор id подредени според растојанието во опаѓачки редослед.
- Потоа да се имплементира класа Point2D која претставува конкретна имплементација на елемент во кластерот за точка во 2Д простор со дадени:
- id - long
- x - float
- y - float
- Растојанието помеѓу две Point2D точки се пресметува со формулата за Евклидово растојание sqrt((x1−x2)2+(y1−y2))
- import java.awt.*;
- import java.util.Comparator;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Scanner;
- import java.util.concurrent.atomic.AtomicInteger;
- interface Element {
- double distance(Element e);
- String print(Element e);
- Long getIdentificator();
- }
- class Point2D implements Element {
- private Long identificator;
- private float x;
- private float y;
- public Point2D(Long identificator, float x, float y) {
- this.identificator = identificator;
- this.x = x;
- this.y = y;
- }
- @Override
- public double distance(Element e) {
- Point2D p2d = (Point2D) e;
- return Math.sqrt(Math.pow((this.x - p2d.x), 2) + Math.pow((this.y - p2d.y), 2));
- }
- @Override
- public Long getIdentificator() {
- return identificator;
- }
- public String print(Element e) {
- return String.format("%d -> %4.3f", identificator, distance(e));
- }
- }
- class Cluster<T extends Element> {
- private Map<Long, T> cluster;
- private Comparator<Element> comparator = (e1, e2) -> (int) -e1.distance(e2);
- public Cluster() {
- this.cluster = new HashMap<Long, T>();
- }
- public void addItem(T element) {
- cluster.put(element.getIdentificator(), element);
- }
- public void near(long id, int top) {
- T element = cluster.get(id);
- AtomicInteger i = new AtomicInteger(1);
- cluster.values()
- .stream()
- .sorted(Comparator.comparing(el -> el.distance(element)))
- .skip(1)
- .limit(top)
- .forEach(el -> System.out.printf("%d. %s\n",i.getAndIncrement(),el.print(element)));
- }
- }
- public class ClusterTest {
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- Cluster<Point2D> cluster = new Cluster<>();
- int n = scanner.nextInt();
- scanner.nextLine();
- for (int i = 0; i < n; ++i) {
- String line = scanner.nextLine();
- String[] parts = line.split(" ");
- long id = Long.parseLong(parts[0]);
- float x = Float.parseFloat(parts[1]);
- float y = Float.parseFloat(parts[2]);
- cluster.addItem(new Point2D(id, x, y));
- }
- int id = scanner.nextInt();
- int top = scanner.nextInt();
- cluster.near(id, top);
- scanner.close();
- }
- }
- Sample input
- 134
- 1 -12.592489 11.226042
- 2 -19.946349 7.771200
- 3 -9.554585 7.104757
- 4 -4.576861 11.614792
- 5 -17.856722 4.663583
- 6 -9.294781 -12.317993
- 7 9.574917 -16.290767
- 8 -1.098660 4.687239
- 9 11.102700 0.992551
- 10 2.189287 5.495277
- 11 11.463659 12.846322
- 12 15.107933 6.770316
- 13 14.638967 -8.843972
- 14 -7.388534 -10.493790
- 15 4.914454 -2.826212
- 16 -15.681654 -8.857618
- 17 7.312006 8.776601
- 18 11.784733 1.980593
- 19 4.543760 -17.098830
- 20 -3.137116 17.478204
- 21 0.617431 0.844155
- 22 -12.886710 -13.176229
- 23 6.811271 -19.784606
- 24 7.649167 -8.459262
- 25 17.954945 15.792233
- 26 10.757923 13.734474
- 27 13.026887 -2.336706
- 28 -13.324047 -13.310999
- 29 -5.535550 6.836640
- 30 -17.253517 14.561376
- 31 15.158340 -15.654356
- 32 -9.627736 14.788987
- 33 -11.403491 -3.091226
- 34 19.065578 18.045590
- 35 5.712840 -12.074122
- 36 -15.197627 1.361523
- 37 9.974684 16.698629
- 38 -7.550393 -1.743515
- 39 10.091063 -18.870625
- 40 17.123908 -5.274345
- 41 -5.563009 3.902281
- 42 -19.357018 14.070394
- 43 14.538022 -13.612944
- 44 -14.995147 2.004540
- 45 1.590616 -4.640580
- 46 15.322889 1.113860
- 47 5.813054 7.236781
- 48 11.550069 2.763390
- 49 -8.306936 17.996724
- 50 2.103418 4.481250
- 51 -4.880829 -1.838241
- 52 -8.740395 -17.233943
- 53 -5.240793 -14.700340
- 54 -3.229108 1.824458
- 55 -1.571746 -15.711500
- 56 -6.627248 -2.821704
- 57 4.133597 10.119678
- 58 1.745860 -17.759006
- 59 2.875000 12.614371
- 60 6.854046 6.195518
- 61 9.276331 19.529227
- 62 -3.140184 5.130069
- 63 -10.376448 -13.176568
- 64 -6.115435 18.320373
- 65 15.753197 -18.311294
- 66 -9.734552 -7.464474
- 67 7.818902 10.236012
- 68 -9.286544 0.585049
- 69 0.482601 -1.495706
- 70 3.175686 -10.727716
- 71 8.740559 -2.875988
- 72 -4.027348 19.292231
- 73 -18.782135 9.608893
- 74 -8.602010 -7.458132
- 75 -5.980308 -5.534441
- 76 9.161842 6.755174
- 77 10.083789 14.106333
- 78 -2.276327 5.424776
- 79 16.863642 -16.668020
- 80 -3.437473 8.597565
- 81 -16.566190 -10.195750
- 82 -12.821504 -6.756758
- 83 -4.378992 4.460784
- 84 -6.654383 0.419831
- 85 4.534243 -4.768329
- 86 -16.539585 -10.772079
- 87 -8.050715 4.607770
- 88 11.328548 15.961929
- 89 -18.111719 -6.103362
- 90 2.969312 0.195664
- 91 9.003859 -7.557752
- 92 -0.920011 -14.463433
- 93 14.508875 -19.805433
- 94 2.274357 -5.956340
- 95 -10.028002 -4.467160
- 96 2.005463 -1.054476
- 97 18.880100 -8.065482
- 98 17.379174 -5.749780
- 99 11.932869 3.498088
- 100 11.876010 -5.686828
- 101 -3.262671 13.470774
- 102 -9.185019 -7.064527
- 103 -11.728649 -17.822066
- 104 5.397891 -3.333249
- 105 0.119796 -13.578305
- 106 -14.372691 -6.883094
- 107 16.789383 2.787833
- 108 16.573300 9.766991
- 109 -19.101557 -18.053391
- 110 8.713240 9.445113
- 111 8.116329 0.570028
- 112 6.070563 -6.116125
- 113 -14.513021 -14.619127
- 114 -0.830934 9.137912
- 115 -2.242312 -8.109888
- 116 -11.524699 -13.719739
- 117 11.556025 10.388447
- 118 -5.650270 -6.868477
- 119 10.137550 0.953821
- 120 13.899374 9.008900
- 121 -2.841680 13.943808
- 122 5.033850 -14.980568
- 123 -12.970190 -0.533195
- 124 -14.407205 -18.079744
- 125 2.323059 -2.031479
- 126 -3.200666 -19.907361
- 127 -14.324046 1.998401
- 128 -15.735465 7.648782
- 129 16.256430 -19.612073
- 130 -15.739002 -13.029527
- 131 15.475025 9.884058
- 132 18.554561 18.548316
- 133 3.103116 15.195434
- 134 -4.876065 5.090755
- 52 6
- Sample output
- 1. 103 -> 3.046
- 2. 53 -> 4.320
- 3. 63 -> 4.375
- 4. 116 -> 4.484
- 5. 6 -> 4.947
- 6. 124 -> 5.730
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement