Advertisement
Naxocist

1140 (Robot)

Apr 1st, 2023
600
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.24 KB | Source Code | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. using pi = pair<int, int>;
  5. const int N = 1e3 + 3;
  6. int dp[N][N];
  7. vector<pi> ar[N];
  8.  
  9. int dist(pi a, pi b) {
  10.     int x = a.first - b.first, y = a.second - b.second;
  11.     return x*x + y*y;
  12. }
  13.  
  14. int main() {
  15.  
  16.     int n, q; scanf("%d%d", &n, &q);
  17.  
  18.     vector<pi> v;
  19.     int x, y;
  20.     for(int i=0; i<n; ++i) {
  21.         scanf("%d%d", &x, &y);
  22.         v.emplace_back(x, y);
  23.     }
  24.  
  25.     for(int i=0; i<n; ++i) {
  26.         for(int j=0; j<n; ++j) {
  27.             ar[i].emplace_back(dist(v[i], v[j]), j);
  28.         }
  29.     }
  30.  
  31.     for(int i=0; i<n; ++i) sort(ar[i].begin(), ar[i].end());
  32.  
  33.     for(int i=0; i<n; ++i) {
  34.         bitset<N> vis;
  35.         vis[i] = true;
  36.         vector<int> order;
  37.         order.push_back(i);
  38.  
  39.         int c = i;
  40.         for(int j=0; j<n; ++j) {
  41.  
  42.             for(auto e : ar[c]) { // distance, point
  43.                 int x = e.second;
  44.                 if(vis[x]) continue ;
  45.                 c = x;
  46.                 vis[x] = true;
  47.                 order.push_back(x);
  48.                 break;
  49.             }
  50.            
  51.         }
  52.  
  53.         for(int k=0; k<n; ++k) {
  54.             dp[i][order[k]] = k + 1;
  55.         }
  56.     }
  57.  
  58.  
  59.     while(q--) {
  60.         int t; scanf("%d%d%d", &x, &y, &t); t--;
  61.         int s = 0, mn = INT_MAX;
  62.         for(int i=0; i<n; ++i) {
  63.             int a, b; tie(a, b) = v[i];
  64.             int d = dist(pi(x, y), pi(a, b));
  65.             if(d < mn) {
  66.                 mn = d;
  67.                 s = i;
  68.             }
  69.         }
  70.  
  71.         printf("%d\n", dp[s][t]);
  72.     }
  73.  
  74.     return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement