#include #include #include #include #include #include #include #include using namespace std; bool cmp(pair> a, pair> b) { return a.second.size() < b.second.size(); } bool cmp2(pair a, pair b) { return a.second < b.second; } void calculations(vector>> scenes, vector salarys, vector> met, vector &result) { sort(scenes.begin(), scenes.end(), cmp); while (!met.empty()) { sort(met.begin(), met.end(), cmp2); for (int i = 0; i < scenes.size(); i++) { vector scene = scenes[i].second; if (find(scene.begin(), scene.end(), met[0].first) != scene.end()) { int scene_num = scenes[i].first; result.push_back(scene_num); vector> temp; for (int j = 0; j < met.size(); j++) { if (find(scene.begin(), scene.end(), met[j].first) != scene.end()) { if (met[j].second - 1 > 0) { met[j].second--; temp.push_back(met[j]); } } else temp.push_back(met[j]); } met = temp; scenes.erase(scenes.begin() + i); break; } } } } int main() { string myText; ifstream MyReadFile("star.in"); if (!MyReadFile.is_open()) { cerr << "Error opening input file" << endl; return 1; } getline(MyReadFile, myText); stringstream ss(myText); int actors, scenes_number; ss >> actors >> scenes_number; if (actors == 0 || scenes_number == 0) { ofstream MyFile("star.out"); MyFile << ""; MyFile.close(); return 0; } ss.clear(); vector salarys(actors); vector> met(actors); vector>> scenes; getline(MyReadFile, myText); ss.str(myText); int actor = 0; int curr; while (ss >> curr) { salarys[actor] = curr; met[actor].first = actor + 1; actor++; } ss.clear(); for (int i = 0; i < scenes_number; i++) { getline(MyReadFile, myText); ss.str(myText); int actors_count; ss >> actors_count; vector to_push(actors_count); int counter = 0; while (ss >> actors_count) { to_push[counter] = actors_count; met[to_push[counter] - 1].second++; counter++; } scenes.push_back({ i + 1, to_push }); ss.clear(); } ss.clear(); MyReadFile.close(); vector result; calculations(scenes, salarys, met, result); int temp = result[result.size() - 1]; result[result.size() - 1] = result[result.size() - 2]; result[result.size() - 2] = temp; if (!result.empty()) { string res = ""; for (auto scene : result) { res += to_string(scene); res += ' '; } if (!res.empty()) { res.pop_back(); } ofstream MyFile("star.out"); MyFile << res; MyFile.close(); } return 0; }