import java.util.ArrayList;
import java.util.Scanner;
int x, y, time;
public Position(int x,
int y,
int time
) { this.x = x;
this.y = y;
this.time = time;
}
}
class problemC {
public static void main
(String[] args
) { Scanner scanner
= new Scanner
(System.
in); int numPositions = scanner.nextInt();
int GPSTimeInterval = scanner.nextInt();
ArrayList<Position> positions = new ArrayList<>();
for (int i = 0; i < numPositions; i++) {
positions.
add(new Position(scanner.
nextInt(), scanner.
nextInt(), scanner.
nextInt())); }
double actualDistance = getDistance(positions);
ArrayList<Position> GPSPositions = new ArrayList<>();
int currentTime = 0;
for (int i = 0; i < numPositions - 1; i++) {
while (currentTime <= next.time) {
if (currentTime < current.time) {
currentTime += GPSTimeInterval;
continue;
}
double fraction = (double)(currentTime - current.time) / (next.time - current.time);
int GPSx
= (int)Math.
round(current.
x + fraction
* (next.
x - current.
x)); int GPSy
= (int)Math.
round(current.
y + fraction
* (next.
y - current.
y)); GPSPositions.
add(new Position(GPSx, GPSy, currentTime
)); currentTime += GPSTimeInterval;
}
}
Position lastPosition
= positions.
get(numPositions
- 1); if (currentTime != lastPosition.time) {
GPSPositions.
add(new Position(lastPosition.
x, lastPosition.
y, lastPosition.
time)); }
double GPSDistance = getDistance(GPSPositions);
double lostPercentage = ((actualDistance - GPSDistance) / actualDistance) * 100;
System.
out.
println(p.
x + " " + p.
y + " - " + p.
time); }
System.
out.
println("-----------"); System.
out.
println(d.
x + " " + d.
y + " - " + d.
time); }
System.
out.
println(lostPercentage
); scanner.close();
}
private static double getDistance(ArrayList<Position> positions) {
double distance = 0.0;
for (int i = 0; i < positions.size() - 1; i++) {
distance
+= Math.
sqrt(Math.
pow(next.
x - current.
x,
2) + Math.
pow(next.
y - current.
y,
2)); }
return distance;
}
}
aW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuU2Nhbm5lcjsKCmNsYXNzIFBvc2l0aW9uIHsKICAgIGludCB4LCB5LCB0aW1lOwoKICAgIHB1YmxpYyBQb3NpdGlvbihpbnQgeCwgaW50IHksIGludCB0aW1lKSB7CiAgICAgICAgdGhpcy54ID0geDsKICAgICAgICB0aGlzLnkgPSB5OwogICAgICAgIHRoaXMudGltZSA9IHRpbWU7CiAgICB9Cn0KCmNsYXNzIHByb2JsZW1DIHsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBTY2FubmVyIHNjYW5uZXIgPSBuZXcgU2Nhbm5lcihTeXN0ZW0uaW4pOwogICAgICAgIGludCBudW1Qb3NpdGlvbnMgPSBzY2FubmVyLm5leHRJbnQoKTsKICAgICAgICBpbnQgR1BTVGltZUludGVydmFsID0gc2Nhbm5lci5uZXh0SW50KCk7CiAgICAgICAgQXJyYXlMaXN0PFBvc2l0aW9uPiBwb3NpdGlvbnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Qb3NpdGlvbnM7IGkrKykgewogICAgICAgICAgICBwb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbihzY2FubmVyLm5leHRJbnQoKSwgc2Nhbm5lci5uZXh0SW50KCksIHNjYW5uZXIubmV4dEludCgpKSk7CiAgICAgICAgfQoKICAgICAgICBkb3VibGUgYWN0dWFsRGlzdGFuY2UgPSBnZXREaXN0YW5jZShwb3NpdGlvbnMpOwogICAgICAgIEFycmF5TGlzdDxQb3NpdGlvbj4gR1BTUG9zaXRpb25zID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgaW50IGN1cnJlbnRUaW1lID0gMDsKCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Qb3NpdGlvbnMgLSAxOyBpKyspIHsKICAgICAgICAgICAgUG9zaXRpb24gY3VycmVudCA9IHBvc2l0aW9ucy5nZXQoaSk7CiAgICAgICAgICAgIFBvc2l0aW9uIG5leHQgPSBwb3NpdGlvbnMuZ2V0KGkgKyAxKTsKCiAgICAgICAgICAgIHdoaWxlIChjdXJyZW50VGltZSA8PSBuZXh0LnRpbWUpIHsKICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VGltZSA8IGN1cnJlbnQudGltZSkgewogICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lICs9IEdQU1RpbWVJbnRlcnZhbDsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRvdWJsZSBmcmFjdGlvbiA9IChkb3VibGUpKGN1cnJlbnRUaW1lIC0gY3VycmVudC50aW1lKSAvIChuZXh0LnRpbWUgLSBjdXJyZW50LnRpbWUpOwogICAgICAgICAgICAgICAgaW50IEdQU3ggPSAoaW50KU1hdGgucm91bmQoY3VycmVudC54ICsgZnJhY3Rpb24gKiAobmV4dC54IC0gY3VycmVudC54KSk7CiAgICAgICAgICAgICAgICBpbnQgR1BTeSA9IChpbnQpTWF0aC5yb3VuZChjdXJyZW50LnkgKyBmcmFjdGlvbiAqIChuZXh0LnkgLSBjdXJyZW50LnkpKTsKICAgICAgICAgICAgICAgIEdQU1Bvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKEdQU3gsIEdQU3ksIGN1cnJlbnRUaW1lKSk7CiAgICAgICAgICAgICAgICBjdXJyZW50VGltZSArPSBHUFNUaW1lSW50ZXJ2YWw7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIFBvc2l0aW9uIGxhc3RQb3NpdGlvbiA9IHBvc2l0aW9ucy5nZXQobnVtUG9zaXRpb25zIC0gMSk7CiAgICAgICAgaWYgKGN1cnJlbnRUaW1lICE9IGxhc3RQb3NpdGlvbi50aW1lKSB7CiAgICAgICAgICAgIEdQU1Bvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKGxhc3RQb3NpdGlvbi54LCBsYXN0UG9zaXRpb24ueSwgbGFzdFBvc2l0aW9uLnRpbWUpKTsKICAgICAgICB9CgogICAgICAgIGRvdWJsZSBHUFNEaXN0YW5jZSA9IGdldERpc3RhbmNlKEdQU1Bvc2l0aW9ucyk7CiAgICAgICAgZG91YmxlIGxvc3RQZXJjZW50YWdlID0gKChhY3R1YWxEaXN0YW5jZSAtIEdQU0Rpc3RhbmNlKSAvIGFjdHVhbERpc3RhbmNlKSAqIDEwMDsKCQkKCQlmb3IoUG9zaXRpb24gcCA6IHBvc2l0aW9ucykgewoJCQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwLnggKyAiICIgKyBwLnkgKyAiIC0gIiArIHAudGltZSk7CgkJfQoJCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0iKTsKCQlmb3IoUG9zaXRpb24gZCA6IEdQU1Bvc2l0aW9ucykgewoJCQkgU3lzdGVtLm91dC5wcmludGxuKGQueCArICIgIiArIGQueSArICIgLSAiICsgZC50aW1lKTsKCQl9CgkJCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxvc3RQZXJjZW50YWdlKTsKICAgICAgICBzY2FubmVyLmNsb3NlKCk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZG91YmxlIGdldERpc3RhbmNlKEFycmF5TGlzdDxQb3NpdGlvbj4gcG9zaXRpb25zKSB7CiAgICAgICAgZG91YmxlIGRpc3RhbmNlID0gMC4wOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9zaXRpb25zLnNpemUoKSAtIDE7IGkrKykgewogICAgICAgICAgICBQb3NpdGlvbiBjdXJyZW50ID0gcG9zaXRpb25zLmdldChpKTsKICAgICAgICAgICAgUG9zaXRpb24gbmV4dCA9IHBvc2l0aW9ucy5nZXQoaSArIDEpOwogICAgICAgICAgICBkaXN0YW5jZSArPSBNYXRoLnNxcnQoTWF0aC5wb3cobmV4dC54IC0gY3VycmVudC54LCAyKSArIE1hdGgucG93KG5leHQueSAtIGN1cnJlbnQueSwgMikpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGlzdGFuY2U7CiAgICB9Cn0=