Advertisement
mickypinata

IPST59: Signal Strength

Nov 16th, 2021
603
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.34 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef pair<int, int> pii;
  5.  
  6. const int N = 150 + 5;
  7. const int NN = 150 * 150 + 5;
  8.  
  9. vector<pii> sortedDist, cnt(1);
  10. vector<int> dist(1);
  11. pii coor[N];
  12. int dp[2][NN];
  13.  
  14. int distance(int u, int v){
  15.     int dx = coor[u].first - coor[v].first;
  16.     int dy = coor[u].second - coor[v].second;
  17.     return dx * dx + dy * dy;
  18. }
  19.  
  20. int main(){
  21.  
  22.     int n;
  23.     scanf("%d", &n);
  24.     for(int i = 1; i <= n; ++i){
  25.         scanf("%d%d", &coor[i].first, &coor[i].second);
  26.     }
  27.     for(int i = 1; i <= n; ++i){
  28.         for(int j = 1; j <= n; ++j){
  29.             int access;
  30.             scanf("%d", &access);
  31.             sortedDist.emplace_back(distance(i, j), access);
  32.         }
  33.     }
  34.     sort(sortedDist.begin(), sortedDist.end());
  35.     int lst = -1;
  36.     for(pii p : sortedDist){
  37.         int d = p.first;
  38.         int acc = p.second;
  39.         if(d != lst){
  40.             dist.push_back(d);
  41.             cnt.emplace_back(0, 0);
  42.             lst = d;
  43.         }
  44.         if(acc == 1){
  45.             ++cnt.back().first;
  46.         } else {
  47.             ++cnt.back().second;
  48.         }
  49.     }
  50.     n = (int)dist.size() - 1;
  51.     for(int i = n; i >= 1; --i){
  52.         dp[0][i] = cnt[i].first + dp[0][i + 1];
  53.         dp[1][i] = min(cnt[i].second + dp[1][i + 1], dp[0][i]);
  54.     }
  55.     cout << dp[1][1];
  56.  
  57.     return 0;
  58. }
  59.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement