문제

링크

풀이

#include <algorithm>
#include <iostream>
#include <unordered_map>
using namespace std;
 
void solve(void) {
  long long n, m, q; cin >> n >> m >> q;
  unordered_map<string, long long> mp1;
  unordered_map<long long, vector<string>> mp2;
  while (n--) {
    long long g, p; string h; cin >> g >> h >> p;
    mp1[h] = p;
    mp2[g].push_back(h);
  }
 
  unordered_map<string, long long> mp3;
  while (q--) {
    long long op; cin >> op;
    if (op == 1) {
      string a; long long b; cin >> a >> b;
      if (m < mp1[a] * b) continue;
      m -= mp1[a] * b;
      mp3[a] += b;
    } else if (op == 2) {
      string a; long long b; cin >> a >> b;
      long long c = min(mp3[a], b);
      m += mp1[a] * c;
      mp3[a] -= c;
    } else if (op == 3) {
      string a; long long c; cin >> a >> c;
      mp1[a] += c;
    } else if (op == 4) {
      long long d, c; cin >> d >> c;
      for (auto &i : mp2[d]) mp1[i] += c;
    } else if (op == 5) {
      long long d, e; cin >> d >> e;
      for (auto &i : mp2[d]) {
        mp1[i] = mp1[i] * (100 + e) / 100;
        mp1[i] -= mp1[i] % 10;
      }
    } else if (op == 6) {
      cout << m << "\n";
    } else if (op == 7) {
      long long tot = m;
      for (auto &i : mp3) tot += mp1[i.first] * i.second;
      cout << tot << "\n";
    }
  }
}
 
int main(void) {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
 
  solve();
  return 0;
}