Advertisement
K_Y_M_bl_C

Untitled

Sep 17th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.22 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. typedef vector<int> vi;
  7. typedef pair<int, int> pii;
  8.  
  9. #define ff first
  10. #define ss second
  11. #define y1 y111
  12. #define X first
  13. #define Y second
  14. #define mk make_pair
  15. #define inb push_back
  16. #define all(v) v.begin(), v.end()
  17.  
  18. const int MAXN = (int)1e6 + 9, MAXN1 = (int)2e4 + 7;
  19. const int INFint = (int)1e9 + 7, P = 31;
  20. const ll INFll = (ll)1e18 + 7, MOD = (ll)1e9 + 7;
  21. const double INFfl = 1e18 * 4 + 7;
  22. const double EPS = 1e-7;
  23. const double PI = atan2(0, -1);
  24.  
  25. int solve();
  26.  
  27. int main()
  28. {
  29. #define TASK ""
  30. #ifdef _DEBUG
  31.     freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
  32. #else
  33.     //freopen(TASK".in", "r", stdin), freopen(TASK".out", "w", stdout);
  34. #endif
  35.     solve();
  36. }
  37.  
  38. const int STRBUF = (int)1e6 + 7;
  39. char buf[STRBUF];
  40. string get_str()
  41. {
  42.     scanf(" %s", buf);
  43.     return string(buf);
  44. }
  45.  
  46. int solve()
  47. {
  48.     int n;
  49.     scanf("%d", &n);
  50.     vector<int> x(n);
  51.     vector<vi> t(n, vi(5));
  52.     map<string, int> tr;
  53.     map<int, string> rt;
  54.     //
  55.     tr["Pikachu"] = 0;
  56.     tr["Bulbasaur"] = 1;
  57.     tr["Charmander"] = 2;
  58.     tr["Squirtle"] = 3;
  59.     tr["Psyduck"] = 4;
  60.     rt[0] = "Pikachu";
  61.     rt[1] = "Bulbasaur";
  62.     rt[2] = "Charmander";
  63.     rt[3] = "Squirtle";
  64.     rt[4] = "Psyduck";
  65.     //
  66.     for (int i = 0; i < n; ++i)
  67.     {
  68.         scanf("%d", &x[i]);
  69.     }
  70.     int m;
  71.     scanf("%d", &m);
  72.     vector<pair<pii, int>> p(m);
  73.     vi was(m);
  74.     for (int i = 0; i < m; ++i)
  75.     {
  76.         scanf("%d %d", &p[i].X.X, &p[i].X.Y);
  77.         p[i].Y = tr[get_str()];
  78.     }
  79.     vector<vector<pii>> ans(n);
  80.     for (int ti = 1; ti <= 100000; ++ti)
  81.     {
  82.         for (int i = 0; i < m; ++i)
  83.         {
  84.             if (p[i].X.X == ti)
  85.                 was[i] = 1;
  86.         }
  87.         vi killed(m);
  88.         for (int i = 0; i < n; ++i)
  89.         {
  90.             int idn = -1;
  91.             int pos = x[i];
  92.             for (int j = 0; j < m; ++j)
  93.             {
  94.                 if (was[j] == 0 || was[j] == 2 || t[i][p[j].Y])
  95.                     continue;
  96.                 int posp = p[j].X.Y;
  97.                 if (idn == -1 || (abs(pos - posp) < abs(pos - p[idn].X.Y) || (abs(pos - posp) == abs(pos - p[idn].X.Y) && p[j].X.X < p[idn].X.X)))
  98.                 {
  99.                     idn = j;
  100.                 }
  101.             }
  102.             if (idn == -1)
  103.                 continue;
  104.             int go = p[idn].X.Y;
  105.             //cout << go << "\n";
  106.             if (abs(pos - go) <= 1)
  107.             {
  108.                 for (int j = 0; j < m; ++j)
  109.                 {
  110.                     if (was[j] == 1 && t[i][p[j].Y] == 0 && p[j].X.Y == go)
  111.                     {
  112.                         ans[i].inb(mk(p[j].Y, ti));
  113.                         killed[j] = 1;
  114.                         t[i][p[j].Y] = 1;
  115.                     }
  116.                 }
  117.             }
  118.             if (go < x[i])
  119.             {
  120.                 --x[i];
  121.             }
  122.             else
  123.             {
  124.                 if (go > x[i])
  125.                     ++x[i];
  126.             }
  127.         }
  128.         for (int i = 0; i < m; ++i)
  129.             if (killed[i])
  130.             {
  131.                 was[i] = 2;
  132.             }
  133.     }
  134.     for (auto &v : ans)
  135.     {
  136.         cout << v.size() << " ";
  137.         for (auto &x : v)
  138.             cout << rt[x.X] << " " << x.Y << " ";
  139.         cout << "\n";
  140.     }
  141.     return 0;
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement