Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef vector<int> vi;
- typedef pair<int, int> pii;
- #define ff first
- #define ss second
- #define y1 y111
- #define X first
- #define Y second
- #define mk make_pair
- #define inb push_back
- #define all(v) v.begin(), v.end()
- const int MAXN = (int)1e6 + 9, MAXN1 = (int)2e4 + 7;
- const int INFint = (int)1e9 + 7, P = 31;
- const ll INFll = (ll)1e18 + 7, MOD = (ll)1e9 + 7;
- const double INFfl = 1e18 * 4 + 7;
- const double EPS = 1e-7;
- const double PI = atan2(0, -1);
- int solve();
- int main()
- {
- #define TASK ""
- #ifdef _DEBUG
- freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
- #else
- //freopen(TASK".in", "r", stdin), freopen(TASK".out", "w", stdout);
- #endif
- solve();
- }
- const int STRBUF = (int)1e6 + 7;
- char buf[STRBUF];
- string get_str()
- {
- scanf(" %s", buf);
- return string(buf);
- }
- int solve()
- {
- int n;
- scanf("%d", &n);
- vector<int> x(n);
- vector<vi> t(n, vi(5));
- map<string, int> tr;
- map<int, string> rt;
- //
- tr["Pikachu"] = 0;
- tr["Bulbasaur"] = 1;
- tr["Charmander"] = 2;
- tr["Squirtle"] = 3;
- tr["Psyduck"] = 4;
- rt[0] = "Pikachu";
- rt[1] = "Bulbasaur";
- rt[2] = "Charmander";
- rt[3] = "Squirtle";
- rt[4] = "Psyduck";
- //
- for (int i = 0; i < n; ++i)
- {
- scanf("%d", &x[i]);
- }
- int m;
- scanf("%d", &m);
- vector<pair<pii, int>> p(m);
- vi was(m);
- for (int i = 0; i < m; ++i)
- {
- scanf("%d %d", &p[i].X.X, &p[i].X.Y);
- p[i].Y = tr[get_str()];
- }
- vector<vector<pii>> ans(n);
- for (int ti = 1; ti <= 100000; ++ti)
- {
- for (int i = 0; i < m; ++i)
- {
- if (p[i].X.X == ti)
- was[i] = 1;
- }
- vi killed(m);
- for (int i = 0; i < n; ++i)
- {
- int idn = -1;
- int pos = x[i];
- for (int j = 0; j < m; ++j)
- {
- if (was[j] == 0 || was[j] == 2 || t[i][p[j].Y])
- continue;
- int posp = p[j].X.Y;
- 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)))
- {
- idn = j;
- }
- }
- if (idn == -1)
- continue;
- int go = p[idn].X.Y;
- //cout << go << "\n";
- if (abs(pos - go) <= 1)
- {
- for (int j = 0; j < m; ++j)
- {
- if (was[j] == 1 && t[i][p[j].Y] == 0 && p[j].X.Y == go)
- {
- ans[i].inb(mk(p[j].Y, ti));
- killed[j] = 1;
- t[i][p[j].Y] = 1;
- }
- }
- }
- if (go < x[i])
- {
- --x[i];
- }
- else
- {
- if (go > x[i])
- ++x[i];
- }
- }
- for (int i = 0; i < m; ++i)
- if (killed[i])
- {
- was[i] = 2;
- }
- }
- for (auto &v : ans)
- {
- cout << v.size() << " ";
- for (auto &x : v)
- cout << rt[x.X] << " " << x.Y << " ";
- cout << "\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement