Advertisement
mickypinata

TOI9: Spaceship

Jul 14th, 2021
901
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef tuple<int, int, int> tiii;
  5.  
  6. const int N = 10;
  7.  
  8. tiii coor[N + 2], piece[N + 2], curr;
  9. bool visited[N + 1];
  10. int nVertex, ans, tr, dist;
  11.  
  12. int distance(tiii &a, tiii &b){
  13.     int dx = get<0>(a) - get<0>(b);
  14.     int dy = get<1>(a) - get<1>(b);
  15.     int dz = get<2>(a) - get<2>(b);
  16.     return dx * dx + dy * dy + dz * dz;
  17. }
  18.  
  19. void DFS(int u){
  20.     if(curr == tiii(tr, tr, tr)){
  21.         ans = min(ans, dist);
  22.         return;
  23.     }
  24.     visited[u] = true;
  25.     for(int v = 1; v <= nVertex; ++v){
  26.         if(!visited[v]){
  27.             int dis = distance(coor[u], coor[v]);
  28.             tiii st = curr;
  29.             dist += dis;
  30.             get<0>(curr) = min(tr, get<0>(curr) + get<0>(piece[v]));
  31.             get<1>(curr) = min(tr, get<1>(curr) + get<1>(piece[v]));
  32.             get<2>(curr) = min(tr, get<2>(curr) + get<2>(piece[v]));
  33.             DFS(v);
  34.             dist -= dis;
  35.             curr = st;
  36.  
  37.         }
  38.     }
  39.     visited[u] = false;
  40. }
  41.  
  42. int main(){
  43.  
  44.     tiii st;
  45.     scanf("%d%d%d%d%d", &tr, &get<0>(st), &get<1>(st), &get<2>(st), &nVertex);
  46.     for(int i = 1; i <= nVertex; ++i){
  47.         scanf("%d%d%d%d%d%d", &get<0>(coor[i]), &get<1>(coor[i]), &get<2>(coor[i]), &get<0>(piece[i]), &get<1>(piece[i]), &get<2>(piece[i]));
  48.     }
  49.     coor[nVertex + 1] = st;
  50.  
  51.     ans = 1e9;
  52.     DFS(nVertex + 1);
  53.     cout << ans;
  54.  
  55.     return 0;
  56. }
  57.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement