#include #include #include #define arrlen(x) (sizeof(x) / sizeof(x[0])) long checkmax(long * maxcals, long * maxelfs, int n, int cal, int elf) { long i, j; for (i = 0; i < n; ++i) { if (cal > maxcals[i]) { if ((j = i + 1) < n) { memmove(maxcals + j, maxcals + i, (n - j) * sizeof(long)); memmove(maxelfs + j, maxelfs + i, (n - j) * sizeof(long)); } maxcals[i] = cal; maxelfs[i] = elf; break; } } return i; } int main() { char buf[BUFSIZ]; long cal = 0, maxcal[3] = {0}, elf = 0, maxelf[3] = {0}; while (fgets(buf, sizeof(buf), stdin)) { char * pbuf = buf; long n; if ((n = strtol(buf, &pbuf, 10)) == 0 && pbuf == buf) { checkmax(maxcal, maxelf, arrlen(maxcal), cal, elf); cal = 0; ++elf; } else { cal += n; } } checkmax(maxcal, maxelf, arrlen(maxcal), cal, elf); printf("maxcal: %ld (elf: %ld/%ld/%ld)\n", maxcal[0] + maxcal[1] + maxcal[2], maxelf[0], maxelf[1], maxelf[2]); return 0; }