Revizia anterioară Revizia următoare
Implementare minimalistă parsare I/O in C:
== code(cpp) |
#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; } ==