fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. typedef struct {
  5. int x, y;
  6. } Point;
  7.  
  8. int main() {
  9. int err, n;
  10. scanf("%d", &err);
  11. scanf("%d", &n);
  12.  
  13. Point target, hide_sites[n];
  14. scanf("%d %d", &target.x, &target.y);
  15.  
  16. for (int i = 0; i < n; ++i) {
  17. scanf("%d %d", &hide_sites[i].x, &hide_sites[i].y);
  18. }
  19.  
  20. int closest_headshot = -1;
  21. double min_distance_headshot = 2000.0;
  22. int torso_sites[2] = {-1, -1};
  23. double min_distance_torso[2] = {2000.0, 2000.0};
  24.  
  25. for (int i = 0; i < n; ++i) {
  26. double distance = sqrt(pow(target.x - hide_sites[i].x, 2) + pow(target.y - hide_sites[i].y, 2));
  27. int mil_distance = (int)(distance * 1000); // converting meters to millimeters
  28. if (mil_distance <= err) {
  29. if (mil_distance < min_distance_headshot) {
  30. min_distance_headshot = mil_distance;
  31. closest_headshot = i;
  32. }
  33. } else if (mil_distance <= err * 2) {
  34. if (mil_distance < min_distance_torso[1]) {
  35. if (mil_distance < min_distance_torso[0]) {
  36. min_distance_torso[1] = min_distance_torso[0];
  37. torso_sites[1] = torso_sites[0];
  38. min_distance_torso[0] = mil_distance;
  39. torso_sites[0] = i;
  40. } else {
  41. min_distance_torso[1] = mil_distance;
  42. torso_sites[1] = i;
  43. }
  44. }
  45. }
  46. }
  47.  
  48. if (closest_headshot != -1) {
  49. printf("%d\n", closest_headshot);
  50. } else if (torso_sites[0] != -1 && torso_sites[1] != -1) {
  51. printf("%d %d\n", torso_sites[0], torso_sites[1]);
  52. } else {
  53. printf("abort\n");
  54. }
  55.  
  56. return 0;
  57. }
  58.  
Success #stdin #stdout 0s 5392KB
stdin
20
3
0 0
-500 1500
1000 200
3000 1000
stdout
abort