Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- abstract class Element{
- protected long id;
- public Element(long id) {
- this.id = id;
- }
- public abstract double getDistance(Element el);
- }
- class Point2D extends Element{
- private float x;
- private float y;
- public Point2D(long id, float x, float y) {
- super(id);
- this.x = x;
- this.y = y;
- }
- public long getId() {
- return id;
- }
- public float getX() {
- return x;
- }
- public float getY() {
- return y;
- }
- public double getDistance(Element el){
- Point2D point = (Point2D) el;
- return Math.sqrt(Math.pow((x - point.x), 2) + Math.pow((y -point.y),2));
- }
- }
- class Cluster<T extends Point2D>{
- List<T> elements;
- public Cluster() {
- this.elements = new ArrayList<>();
- }
- public void addItem(T element){
- elements.add(element);
- }
- public void near(long id, int top){
- T element = null;
- for (T el:elements){
- if (el.id == id)
- element = el;
- }
- T finalElement = element;
- elements.sort(Comparator.comparing(el -> el.getDistance(finalElement)));
- for (int i=0; i<top; i++){
- System.out.println(String.format("%d. %d -> %.3f", i+1, elements.get(i+1).id, elements.get(i+1).getDistance(finalElement)));
- }
- }
- }
- 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();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement