Advertisement
Guest User

Untitled

a guest
Aug 20th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.58 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement