SHARE
TWEET

Untitled

a guest Aug 20th, 2019 55 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <cmath>
  2. #include <vector>
  3. #include <iostream>
  4. #include <algorithm>
  5. #include <functional>
  6.  
  7. using namespace std;
  8.  
  9. typedef struct __bt {
  10.     int x, y, range, power;
  11.     __bt() : x(0), y(0), range(0), power(0) {}
  12.     __bt(int x, int y, int range, int power) :
  13.         x(x), y(y), range(range), power(power) {}
  14. } BT;
  15.  
  16. int a[101], b[101];
  17. BT bt[10];
  18. bool btcheck[10];
  19.  
  20. int dx[5] = { 0, -1, 0, 1, 0 };
  21. int dy[5] = { 0, 0, 1, 0, -1 };
  22.  
  23. bool cmp(const pair<int, int>& u, const pair<int, int>& v) {
  24.     return u.first > v.first;
  25. }
  26.  
  27. int main(void) {
  28.     ios_base::sync_with_stdio(false);
  29.     cin.tie(nullptr);
  30.  
  31.     int tc;
  32.     cin >> tc;
  33.     for (int test_case = 1; test_case <= tc; test_case++) {
  34.         vector<vector<vector<pair<int,int>>>> mat(11, vector<vector<pair<int,int>>>(11, vector<pair<int,int>>()));
  35.         int n, m;
  36.         cin >> n >> m;
  37.         for (int i = 1; i <= n; i++) { 
  38.             cin >> a[i];
  39.         }
  40.         for (int i = 1; i <= n; i++) {
  41.             cin >> b[i];
  42.         }
  43.         for (int i = 0; i < m; i++) {
  44.             cin >> bt[i].y >> bt[i].x >> bt[i].range >> bt[i].power;
  45.            
  46.             for (int u = 1; u <= 10; u++) {
  47.                 for (int v = 1; v <= 10; v++) {
  48.                     if (abs(u - bt[i].x) + abs(v - bt[i].y) <= bt[i].range) {
  49.                         mat[u][v].push_back(make_pair(bt[i].power, i));
  50.                     }
  51.                 }
  52.             }
  53.         }
  54.  
  55.         for (int i = 1; i <= 10; i++) {
  56.             for (int j = 1; j <= 10; j++) {
  57.                 sort(mat[i][j].begin(), mat[i][j].end(), cmp);
  58.             }
  59.         }
  60.  
  61.         int sum = 0;
  62.         int ax, ay, bx, by;
  63.         ax = ay = 1;
  64.         bx = by = 10;
  65.         for (int i = 0; i <= n; i++) {
  66.             ax += dx[a[i]];
  67.             ay += dy[a[i]];
  68.             bx += dx[b[i]];
  69.             by += dy[b[i]];
  70.  
  71.             if (ax == bx && ay == by) {
  72.                 if (mat[ax][ay].size() == 1) {
  73.                     sum += mat[ax][ay][0].first;
  74.                 }
  75.                 else if (mat[ax][ay].size() > 1) {
  76.                     sum += mat[ax][ay][0].first;
  77.                     sum += mat[ax][ay][1].first;           
  78.                 }
  79.             }
  80.             else {
  81.                 int val1, val2;
  82.                 val1 = val2 = 0;
  83.                 memset(btcheck, false, sizeof(btcheck));
  84.                 if (!mat[ax][ay].empty()) {
  85.                     val1 += mat[ax][ay][0].first;
  86.                     btcheck[mat[ax][ay][0].second] = true;
  87.                 }
  88.                 if (!mat[bx][by].empty()) {
  89.                     for (int j = 0; j < mat[bx][by].size(); j++) {
  90.                         if (!btcheck[mat[bx][by][j].second]) {
  91.                             val1 += mat[bx][by][j].first;
  92.                             break;
  93.                         }
  94.                     }
  95.                    
  96.                 }
  97.                 memset(btcheck, false, sizeof(btcheck));               
  98.                 if (!mat[bx][by].empty()) {
  99.                     val2 += mat[bx][by][0].first;
  100.                     btcheck[mat[bx][by][0].second] = true;
  101.                 }
  102.                 if (!mat[ax][ay].empty()) {
  103.                     for (int j = 0; j < mat[ax][ay].size(); j++) {
  104.                         if (!btcheck[mat[ax][ay][j].second]) {
  105.                             val2 += mat[ax][ay][j].first;
  106.                             break;
  107.                         }
  108.                     }
  109.                 }
  110.                 sum += max(val1, val2);
  111.             }
  112.         }
  113.         cout << "#" << test_case << " " << sum << '\n';
  114.     }
  115.  
  116.     return 0;
  117. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top