Advertisement
yungyao

neoj 795 最近點對

Jun 11th, 2021 (edited)
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.36 KB | None | 0 0
  1. /*
  2.  
  3. weak        weak  we      ak   we  akwea        weak  we
  4.   weak    weak    we      ak   weak    weak    we  ak we
  5.     weakweak      we      ak   wea       ak   we    akwe
  6.       wea         we      ak   we        ak   we    akwe
  7.       wea         we      ak   we        ak   we    akwe
  8.       wea          eak  weak   we        ak    we  ak we
  9.       wea            wea  ak   we        ak     weak  we
  10.                                                       we
  11. we      ak     wea  ak       weak                     we
  12.  we    ak    wea  weak     wea  eak                   we
  13.   we  ak    we      ak   wea      wea         we      we
  14.    weak     we      ak   we        we         we      we
  15.     we      we      ak   we        we         we      we
  16.    we        wea  weak    wea    wea          weak  weak
  17. weak           wea  akw      weak                weak
  18.  
  19.  
  20. */
  21. using namespace std;
  22. #include <vector>
  23. #include <queue>
  24. #include <algorithm>
  25. #include <cmath>
  26. #include <utility>
  27. #include <bitset>
  28. #include <set>
  29. #include <string>
  30. #include <stack>
  31. #include <iomanip>
  32. #include <map>
  33. #include <memory.h>
  34. #include <deque>
  35.  
  36. #define pb push_back
  37. #define pii pair<long long,long long>
  38. #define F first
  39. #define S second
  40. #define LL long long
  41. #define mid (LB+RB)/2
  42. #define vvl vector <vector<LL>>
  43. #define vl vector <LL>
  44. #define mpr make_pair
  45.  
  46. //iterators
  47. #define iter(x) x.begin(),x.end()
  48. #define aiter(a,n) a,a+n
  49.  
  50. //loops
  51. #define REP(n) for (int ___=n;___--;)
  52. #define REP0(i,n) for (int i=0;i<n;++i)
  53. #define REP1(i,n) for (int i=1;i<=n;++i)
  54. #define FOR(i,b,l,k) for (int i=b;i!=l;i+=k)
  55. #define forEach(i,v) for (auto i:v)
  56.  
  57. /*
  58. yungyao so weeeeeeeeeeeeeeeeeeeeeeeeeeak
  59. 8e7 so dian
  60. FHVirus so dian
  61. youou so dian
  62. KYW so dian
  63. hubert so dian
  64. jass so dian
  65. tingyu so dian
  66. panda so dian
  67. */
  68.  
  69. //IO
  70. #include <iostream>
  71. #define theyRSOOOOOOOOODIAN ios_base::sync_with_stdio(false),cin.tie(0);
  72. //testing some stuff, still under construction
  73. //a lot more useful while debug
  74. inline void print(vector <int> v){
  75.     for (auto i:v)
  76.         cout << i << ' ';
  77.     cout << '\n';
  78. }
  79. inline void print(vector <int> v,char sep,char end){
  80.     for (auto i:v)
  81.         cout << i << sep;
  82.     cout << end;
  83. }
  84.  
  85. //constants
  86. const LL maxn = 200200,mod = (119 << 23) ^ 1;
  87.  
  88. //workspace
  89.  
  90. #include <ext/pb_ds/assoc_container.hpp>
  91.  
  92. struct chash{
  93.     int operator()(pii x)const {
  94.         return (x.F * ((long long)(1e9+7)) + x.S) % mod;
  95.     }
  96. };
  97.  
  98. __gnu_pbds::gp_hash_table <pii,int,chash> ht;
  99.  
  100. //random
  101. #include <random>
  102.  
  103. inline LL dis(pii a,pii b){
  104.     return (a.F - b.F) * (a.F - b.F) + (a.S - b.S) * (a.S - b.S);
  105. }
  106.  
  107. inline pii tras(pii a,double d){
  108.     return {a.F / d,a.S / d};
  109. }
  110.  
  111. //pow
  112. inline long long pow_(long long n,long long k){
  113.     long long val = 1;
  114.     for (;k;k>>=1){
  115.         if (k & 1)
  116.             val = val * n % mod;
  117.         n = n*n % mod;
  118.     }
  119.     return val;
  120. }
  121.  
  122. pii p[maxn];
  123. int dx[25];
  124. int dy[25];
  125.  
  126. inline void reinit(int n,double d){
  127.     ht.clear();
  128.     REP1(i,n){
  129.         ht[mpr((p[i].F << 1) / d,(p[i].S << 1) / d)] = i;
  130.     }
  131. }
  132.  
  133. inline void solve(){
  134.     int n;
  135.  
  136.     cin >> n;
  137.     LL mnx = 0,mny = 0;
  138.     REP1(i,n){
  139.         cin >> p[i].F >> p[i].S;
  140.         mnx = min(mnx,p[i].F);
  141.         mny = min(mny,p[i].S);
  142.     }
  143.     REP1(i,n){
  144.         p[i].F -= mnx;
  145.         p[i].S -= mny;
  146.     }
  147.  
  148.     REP1(i,n){
  149.         swap(p[i],p[pow_(rand(),rand()) % i + 1]);
  150.     }
  151.  
  152.     LL d = dis(p[1],p[2]);
  153.     double srd = sqrt(d);
  154.     REP1 (i,n){
  155.         auto [x,y] = p[i];
  156.         x = (x << 1) / srd;
  157.         y = (y << 1) / srd;
  158.         auto pd = d;
  159.         for (int j=0;j<25;++j){
  160.             if (ht[mpr(x + dx[j],y + dy[j])]){
  161.                 d = min(d,dis(p[i],p[ht[mpr(x + dx[j],y + dy[j])]]));
  162.             }
  163.         }
  164.  
  165.         if (pd > d){
  166.             srd = sqrt(d);
  167.             reinit (i,srd);
  168.         }
  169.         else
  170.             ht[mpr(x,y)] = i;
  171.     }
  172.  
  173.     cout << d << '\n';
  174. }
  175.  
  176. int main(){
  177.     theyRSOOOOOOOOODIAN
  178.     srand(time(0));
  179.     for (int i=0;i<5;++i){
  180.         for (int j=0;j<5;++j){
  181.             dx[i*5+j] = i - 2;
  182.             dy[i*5+j] = j - 2;
  183.         }
  184.     }
  185.     //for (int ;cin;)//use in multi-testcases and end in EOF problems
  186.     //int t,i=1;for (cin >> t;i<=t;++i)//use in multi-testcases problems
  187.     //cout << "Case #" << i << ": ",//use in Google, FB competitions
  188.     solve();//always used
  189.     return 0;
  190. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement