#include #include #define INIT_VALUE 0 int a = INIT_VALUE, b = INIT_VALUE, k = INIT_VALUE, c = INIT_VALUE, **array = NULL, c_counter = INIT_VALUE; void parse_input() { scanf("%d %d %d %d", &a, &b, &k, &c); } int two_pow(int n) { return 1 << n; } void init_array() { int numberOfCombinations = two_pow(k), i; array = (int**)calloc(numberOfCombinations, sizeof(int*)); for (i = 0; i < numberOfCombinations; i++) { array[i] = (int*)calloc(k, sizeof(int)); } } void generate_array() { int numberOfCombinations = two_pow(k); int flipper = 1, counter = 0; int j, i; for (j = k - 1; j >= 0; j--) { for (i = 0; i < numberOfCombinations; i++) { if (counter < flipper) { array[i][j] = a; if (c == a) c_counter++; counter++; } else { array[i][j] = b; if (c == b) c_counter++; counter = (counter + 1) % (flipper * 2); } } flipper *= 2; } } void print_array() { int numberOfCombinations = two_pow(k), i, j; for (i = 0; i < numberOfCombinations; i++) { for (j = 0; j < k; j++) printf("%d ", array[i][j]); putchar('\n'); } } int main(int argc, char** argv) { parse_input(); init_array(); generate_array(); //print_array(); printf("%d", c_counter); return EXIT_SUCCESS; }