fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const double pi=3.14159265359;
  4.  
  5.  
  6. struct data
  7. {
  8. int dd,mm,yy,hh,mn,check;
  9. double lat,lon,dist;
  10. long long num;
  11. };
  12.  
  13. int check(data d[],data key,int n,int j)
  14. {
  15. int i;
  16. for(i=0;i<n;i++)
  17. {
  18. if(key.num==d[i].num&&i!=j)
  19. {
  20. if(key.yy>d[i].yy)
  21. continue;
  22. else if(key.yy==d[i].yy&&key.mm>d[i].mm)
  23. continue;
  24. else if(key.yy==d[i].yy&&key.mm==d[i].mm&&key.dd>d[i].dd)
  25. continue;
  26. else if(key.yy==d[i].yy&&key.mm==d[i].mm&&key.dd==d[i].dd&&key.hh>d[i].hh)
  27. continue;
  28. else if(key.yy==d[i].yy&&key.mm==d[i].mm&&key.dd==d[i].dd&&key.hh==d[i].hh&&key.mn>d[i].mn)
  29. continue;
  30. else
  31. return 0;
  32. }
  33.  
  34. }
  35. return 1;
  36.  
  37. }
  38.  
  39. double hav(data d1,double lat,double lon)
  40. {
  41. double d;
  42. d=2*6378.137*asin(sqrt(pow(sin((d1.lat-lat)/2*pi/180),2) +cos(d1.lat*pi/180)*cos(lat*pi/180)*pow(sin((d1.lon-lon)/2*pi/180),2)));
  43. return d;
  44. }
  45. int main() {
  46. double lat,lon,r;
  47. char ch;
  48. int i;
  49. cin>>lat>>ch>>lon;
  50. cin>>r;
  51. data d[50000];
  52. char str[100];
  53. cin>>str;
  54.  
  55. int x=1,n=0,j,k;
  56.  
  57. do
  58. {
  59. x=scanf("%d/%d/%d %d:%d,%lf,%lf,%lld",&d[n].mm,&d[n].dd,&d[n].yy,&d[n].hh,&d[n].mn,&d[n].lat,&d[n].lon,&d[n].num);
  60. //cout<<x;
  61. n++;
  62.  
  63. }while(x!=-1);
  64.  
  65. // cout<<d[0].lat<<" "<<d[0].lon<<" "<<d[0].num;
  66. n--;
  67.  
  68.  
  69. for(i=0;i<n;i++)
  70. {
  71. d[i].dist=hav(d[i],lat,lon);
  72. if(d[i].dist<r&&check(d,d[i],n,i))
  73. d[i].check=1;
  74. else
  75. d[i].check=0;
  76.  
  77. }
  78.  
  79. //SORT
  80. /* for (i = 0; i < n; i++)
  81.   for (j = 0; j < (n-i-1); j++)
  82.   {
  83.   if(d[j].dist>d[j+1].dist)
  84.   {
  85.   data temp;
  86.   temp=d[j];
  87.   d[j]=d[j+1];
  88.   d[j+1]=temp;
  89.   }
  90.   }*/
  91. data key;
  92. for (i = 1; i < n; i++)
  93. {
  94. key = d[i];
  95. j = i-1;
  96.  
  97.  
  98. while (j >= 0 && d[j].dist > key.dist)
  99. {
  100. d[j+1] = d[j];
  101. j = j-1;
  102. }
  103. d[j+1] = key;
  104. }
  105. // cout<<d[0].num<<" "<<d[0].dist;
  106. if(d[0].dist<r&&d[0].check)
  107. cout<<d[0].num;
  108. for(i=1;d[i].dist<r;i++)
  109. {
  110. if(d[i].check)
  111. cout<<","<<d[i].num;
  112. }
  113. cout<<endl;
  114.  
  115.  
  116.  
  117. return 0;
  118. }
Success #stdin #stdout 0s 6088KB
stdin
18.9778972,72.8321983
1.0
Date&Time,Latitude,Longitude,PhoneNumber
10/21/2016 13:34,18.912875,72.822318,9020320100
10/21/2016 10:35,18.9582233,72.8275845,9020320024
10/21/2016 15:20,18.95169982,72.83525604,9020320047
10/21/2016 15:23,18.9513048,72.8343388,9020357980
10/21/2016 15:23,18.9513048,72.8343388,9020357962
10/21/2016 15:28,18.9548652,72.8332443,9020320027
10/21/2016 14:03,18.9179784,72.8279306,9020357972
10/21/2016 14:03,18.9179784,72.8279306,9020357959
10/21/2016 09:52,18.97523123,72.83494895,9020320007
10/21/2016 09:44,18.9715932,72.8383992,9020357607
10/21/2016 09:44,18.9715932,72.8383992,9020357593
10/21/2016 09:44,18.9715932,72.8383992,9020357584
10/21/2016 14:57,18.93438826,72.82704499,9020320011
10/21/2016 09:56,18.97596514,72.8327072,9020320045
10/21/2016 08:33,18.9811929,72.8353202,9020320084
10/21/2016 13:27,18.9159265,72.8245989,9020357896
10/21/2016 13:09,18.9077347,72.8076201,9020320094
10/21/2016 10:52,18.97523003,72.83494865,9020320007
stdout
9020320045,9020320007,9020320084,9020357607,9020357593,9020357584