#include #include int M = 0; int len = 0; int *A = nullptr; bool inSeq(int x); int bit(int w, int n); int numUnitBits(int w); int main() { FILE* f = fopen("input.txt", "r"); if (f == NULL) { return -1; } if ( fscanf(f, "%d%d", &M, &len) < 2 || M < 0 || M > 30 ) { fclose(f); return -1; } A = new int[len]; for (int i = 0; i < len; ++i) { if (fscanf(f, "%d", A + i) < 1) { fclose(f); delete[] A; return -1; } } fclose(f); for (int i = 0; i < len; ++i) { if (inSeq(A[i])) { A[i] = numUnitBits(A[i]); } } FILE *g = fopen("output.txt", "w"); if (g == NULL) { delete[] A; return -1; } for (int i = 0; i < len; ++i) { fprintf(g, "%d ", A[i]); } fprintf(g, "\n"); fclose(g); delete[] A; return 0; } bool inSeq(int x) { return (bit(x, M) == bit(x, M+1)); } int bit(int w, int k) { w >>= k; return (w & 1); } int numUnitBits(int w) { int maxBits = sizeof(int)*8; int n = 0; for (int i = 0; i < maxBits; ++i) { n += (w & 1); w >>= 1; } return n; }