Click Here to go back to the homepage.

Fast Food Prizes Solution:


#include <bits/stdc++.h>

using namespace std;

int main() {

  // #ifndef TEST 

  // freopen("input.txt", "r", stdin); 

  // freopen("output.txt", "w", stdout); 

  // #endif 

  int n_cases;

  cin >> n_cases;

  while (n_cases--) {

    int prizes, stickers;

    cin >> prizes >> stickers;

    queue < pair < int, set < int >>> q;

    for (int i = 0; i < prizes; i++) {

      int req_stickers;

      cin >> req_stickers;

      set < int > required;

      while (req_stickers--) {

        int curr;

        cin >> curr;

        required.insert(curr);

      }

      int prize_value;

      cin >> prize_value;

      q.push({
        prize_value,
        required
      });

    }

    vector < int > v;

    for (int i = 0; i < stickers; i++) {

      int number_of_sticker;

      cin >> number_of_sticker;

      v.push_back(number_of_sticker);

    }

    int turned_in = 0;

    while (q.size()) {

      auto p = q.front();

      q.pop();

      set < int > required = p.second;

      int claimed = INT_MAX;

      for (auto it = required.begin(); it != required.end(); it++) {

        for (int i = 1; i <= v.size(); i++) {

          if ( * it == i) {

            claimed = min(claimed, v[i - 1]);

          }

        }

      }

      turned_in += claimed * p.first;

    }

    cout << turned_in << endl;

  }

  return 0;

}