#include #include int M = 0; int N = 1; int len = 0; int *A = nullptr; int *seqIdx = nullptr; int seqLen = 0; int sum = 0; bool inSeq(int x); void sortSeq(); int main() { FILE* f = fopen("input.txt", "r"); if (f == NULL) { return -1; } if ( fscanf(f, "%d%d%d", &M, &N, &len) < 3 || N == 0 ) { fclose(f); return -1; } A = new int[len]; seqIdx = new int[len]; sum = 0; for (int i = 0; i < len; ++i) { if (fscanf(f, "%d", A + i) < 1) { fclose(f); delete[] A; delete[] seqIdx; return -1; } sum += A[i]; } fclose(f); seqLen = 0; for (int i = 0; i < len; ++i) { if (inSeq(A[i])) { seqIdx[seqLen] = i; ++seqLen; } } sortSeq(); FILE *g = fopen("output.txt", "w"); if (g == NULL) { delete[] A; delete[] seqIdx; return -1; } for (int i = 0; i < len; ++i) { fprintf(g, "%d ", A[i]); } fprintf(g, "\n"); fclose(g); delete[] A; delete[] seqIdx; return 0; } bool inSeq(int x) { int mm = M; int nn = N; // Denominator of the M/N fraction must be positive if (nn < 0) { mm = (-mm); nn = (-nn); } // |x - sum/len| <= mm/nn int chislitel = x*len - sum; int znamenatel = len; if (chislitel < 0) { // absolute value of the fraction chislitel = (-chislitel); } // Fraction |x - sum/len| = chislitel/znamenatel; // chislitel/znamenatel <= mm/nn <==> // chilsitel*nn <= znamenatel*mm return (chislitel*nn <= znamenatel*mm); } void sortSeq() { // The simple bubble sort bool invers = true; while (invers) { invers = false; for (int i = 0; i < seqLen - 1; ++i) { if (A[seqIdx[i]] > A[seqIdx[i+1]]) { // swap elements int tmp = A[seqIdx[i]]; A[seqIdx[i]] = A[seqIdx[i+1]]; A[seqIdx[i+1]] = tmp; invers = true; } } } }