#include #include #include #define INTS_START_SIZE 8 #define INTS_DELIM " \t\n" #define BUF_SIZE 1024 size_t read_ints(char *str, int **ints) { if (str == NULL) { return 0; } size_t size = INTS_START_SIZE; *ints = malloc(INTS_START_SIZE * sizeof *ints); if (*ints == NULL) { return 0; } size_t i = 0; char *toksave, *end; long int tmp; char *tok = strtok_r(str, INTS_DELIM, &toksave); while (tok != NULL) { tmp = strtol(tok, &end, 10); if (*end == '\0' || isspace(*end)) { // valid number found if (i == size) { // If we have filled array, double its size size *= 2; *ints = realloc(*ints, size * sizeof *ints); if (*ints == NULL) { return 0; } } // store in array (*ints)[i] = tmp; i++; } tok = strtok_r(NULL, INTS_DELIM, &toksave); } return i; } int read_adp(int n, int (*adp)[3]) { char buf[BUF_SIZE]; int *ints; size_t ints_len; int i; for (i = 0; i < n; i++) { fgets(buf, BUF_SIZE, stdin); ints_len = read_ints(buf, &ints); if (ints_len != 3) { return 1; } adp[i][0] = ints[0]; adp[i][1] = ints[1]; adp[i][2] = ints[2]; free(ints); } return 0; } int min_const_diff(int n, int (*adp)[3], int i, int j) { return 0; } int add_powers(int n, int (*adp)[3], int i, int j, int v) { return 0; } int handle_query(char *str, int n, int (*adp)[3]) { int *ints; int ints_len = read_ints(str, &ints); if (ints_len < 1) { return 1; } int query_type = ints[0]; if (query_type == 0) { if (ints_len != 3) { return 1; } return min_const_diff(n, adp, ints[1], ints[2]); } if (query_type == 1) { if (ints_len != 4) { return 1; } return add_powers(n, adp, ints[1], ints[2], ints[3]); } return 1; } int main(int argc, char **argv) { char buf[BUF_SIZE]; fgets(buf, BUF_SIZE, stdin); char *end; int n = strtol(buf, &end, 10); if (!isspace(*end) || n < 1) { return 0; } int (*adp)[3] = malloc(3 * n * sizeof **adp); if (adp == NULL) { return 0; } int err = read_adp(n, adp); if (err) { return 0; } int i; for (i = 0; i < n; i++) { printf("%d %d %d\n", adp[i][0], adp[i][1], adp[i][2]); } fgets(buf, BUF_SIZE, stdin); int q = strtol(buf, &end, 10); if (!isspace(*end)) { return 0; } for (i = 0; i < q; i++) { fgets(buf, BUF_SIZE, stdin); err = handle_query(buf, n, adp); if (err) { return 0; } } return 0; }