#include #include #include using namespace std; int N, M; int* zaplata; int** scn; int* weight; void printArr(int** arr, int x) { stringstream res; int ss; for (int i = 0; i < x; i++) { ss = arr[i][0]; res << ss << " => "; for (int j = 1; j <= ss; j++) { res << arr[i][j] << ": "; } res << "\n"; } cout << res.str() << "\n"; } void printArr(int *arr, int x) { stringstream res; for (int i = 0; i < x; i++) { res << arr[i] << ": "; } cout << res.str()<<"\n"; } void readFile() { ifstream myfile("star.in"); myfile >> N >> M; //цена актьори zaplata = new int[N]; weight = new int[N]; for (int i = 0; i < N; i++) { myfile >> zaplata[i]; weight[i] = 0; } printArr(zaplata, N); //сцени scn = new int*[M]; int ss = 0; for (int i = 0; i < M; i++) { myfile >> ss; scn[i] = new int[ss + 1]; scn[i][0] = ss; for (int j = 1; j <= ss; j++) { myfile >> scn[i][j]; weight[scn[i][j] - 1]++; } } printArr(scn, M); //тежест for (int i = 0; i < N; i++) { weight[i] = (M - weight[i]) * zaplata[i]; } printArr(weight, N); } void swap(int* arr, int i, int j) { int t = arr[i]; arr[i] = arr[j]; arr[j] = t; } int* sortByWegth() { int* index = new int[N]; for (int i = 0; i < N; i++) { index[i] = i; } for (int i = 0; i < N-1; i++) { int maxInd = -1; for (int j = i+1; j < N; j++) { if (weight[index[i]] < weight[index[j]]) { if (maxInd < j) { maxInd = j; } } } if (maxInd > -1) { //swap swap(index, i, maxInd); } } cout << "\nsortByWegth\n"; printArr(index, N); return index; } string firstOne() { int* index = sortByWegth(); int* views = new int[M]; for (int i = 0; i < M; i++) { views[i] = -1; } int viewNom = 0; //По най-скъп актьор for (int i = 0; i < N; i++) { int aktIndex = index[i]; //Намираме всички сцени с него for (int j = 0; j < M; j++) { int maxM = scn[j][0]; int v = 0; for (int k = 1; k <= maxM; k++) { if (scn[j][k] == aktIndex + 1) { if (views[j] == -1) { views[j] = viewNom; v = 1; } break; } } viewNom+=v; } } stringstream res; int* pr = new int[M]; for (int i = 0; i < M; i++) { pr[views[i]] = i ; } for (int i = 0; i < M; i++) { res << pr[i] + 1 << " "; } return res.str(); } string dumyone() { stringstream res; for (int i = 1; i <= M; i++) { res << i << " "; } return res.str(); } void writeFile(string output) { ofstream offile("star.out"); offile << output; } int main() { string result = ""; readFile(); result = dumyone(); writeFile(result); result = firstOne(); writeFile(result); }