Atenție! Aceasta este o versiune veche a paginii., scrisă la 2023-03-21 11:01:45.000.
Revizia anterioară   Revizia următoare  

Implementare minimalistă parsare I/O in C:
== code© |
#include
#include

// Modificati numele fisierelor de intrare
#define FILE_IN “fisier.in”
#define FILE_OUT “fisier.out”
#define BUFF_SIZE 131072
#define MAX_DIG_LEN 20

FILE *file_in, *file_out;
char buff[BUFF_SIZE], obuff[BUFF_SIZE], num_buff[MAX_DIG_LEN];
int pos = 0, opos = 0;

static inline void init_parsing() { file_in = fopen(FILE_IN, “r”); file_out = fopen(FILE_OUT, “w”); fread(buff, 1, BUFF_SIZE, file_in);
}

static inline void finish_parsing() { fwrite(obuff, 1, opos, file_out); fclose(file_in); fclose(file_out);
}

static inline void read_int(int *n) { while (isspace(buff[pos])) { pos++; if (pos == BUFF_SIZE) { fread(buff, 1, BUFF_SIZE, file_in); pos = 0; } }

int nr = 0; while (isdigit(buff[pos])) { nr = nr * 10 + buff[pos++] – ‘0’; if (pos == BUFF_SIZE) { fread(buff, 1, BUFF_SIZE, file_in); pos = 0; } } *n = nr; }

static inline void write_ch(char ch) { obuff[opos++] = ch; if (opos == BUFF_SIZE) { fwrite(obuff, 1, BUFF_SIZE, file_out); opos = 0; }
}

static inline void write_ll(long long n) { int idx = 0; do { num_buff[++idx] = n % 10 + ‘0’; n /= 10; } while (n > 0);

while (idx) write_ch(num_buff[idx—]); }

static inline void write_int(int n) { int idx = 0; do { num_buff[++idx] = n % 10 + ‘0’; n /= 10; } while (n > 0);

while (idx) write_ch(num_buff[idx—]); }

int main() { init_parsing();

// Exemplu de utilizare int a, b, sum; long long product; read_int(&a); read_int(&b); sum = a + b; product = 1LL * a * b; write_int(sum); write_ch(’ ‘); write_ll(product); write_ch(‘\n’); finish_parsing(); return 0; } ==