From a1eb38bebe6ce1668c3f96489506c3b05b9fe5cb Mon Sep 17 00:00:00 2001 From: mathiasmagnusson Date: Fri, 9 Dec 2022 18:00:41 +0100 Subject: Move stuff around --- kattis-kth-alginda-quicksort/radix64.c | 95 ---------------------------------- 1 file changed, 95 deletions(-) delete mode 100644 kattis-kth-alginda-quicksort/radix64.c (limited to 'kattis-kth-alginda-quicksort/radix64.c') diff --git a/kattis-kth-alginda-quicksort/radix64.c b/kattis-kth-alginda-quicksort/radix64.c deleted file mode 100644 index 54b0155..0000000 --- a/kattis-kth-alginda-quicksort/radix64.c +++ /dev/null @@ -1,95 +0,0 @@ -/* https://kth.kattis.com/problems/kth.alginda.quicksort */ - -#include -#include -#include -#include -#include -#include - -// longest int: -2147483648 -#define BUFFER_MAX (12 * 600000) -char buffer[BUFFER_MAX]; -long xs[600000]; -long tmp[600000]; - -void radix_sort(int n) { - long *out = xs; - long *in = tmp; - // we loop an even amount of times so the completely sorted array - // will be in xs, not tmp - for (int m = 0; m < 40; m += 8) { - long *tmp = out; - out = in; - in = tmp; - - int counts[256] = { 0 }; - for (int i = 0; i < n; i++) - counts[(uint8_t) (in[i] >> m)]++; - - int sum = 0; - for (int i = 0; i < 256; i++) { - sum += counts[i]; - counts[i] = sum; - } - for (int i = n - 1; i >= 0; i--) { - uint8_t fx = in[i] >> m; - counts[fx]--; - out[counts[fx]] = in[i]; - } - } -} - -int main() { - ssize_t len = read(0, buffer, BUFFER_MAX); - - char *p = buffer; - int n = 0; - while (*p != ' ') { - n *= 10; - n += *p - '0'; - p++; - } - - p = &buffer[len - 1]; - for (int i = n - 1; i >= 0; i--) { - while (*p == ' ' || *p == '\n') p--; - - long x = 0; - - bool c = true; - if (c) x += (long)(*p-- - '0') << 0; if (*p == ' ' || *p == '\n') c = false; - if (c) x += (long)(*p-- - '0') << 4; if (*p == ' ' || *p == '\n') c = false; - if (c) x += (long)(*p-- - '0') << 8; if (*p == ' ' || *p == '\n') c = false; - if (c) x += (long)(*p-- - '0') << 12; if (*p == ' ' || *p == '\n') c = false; - if (c) x += (long)(*p-- - '0') << 16; if (*p == ' ' || *p == '\n') c = false; - if (c) x += (long)(*p-- - '0') << 20; if (*p == ' ' || *p == '\n') c = false; - if (c) x += (long)(*p-- - '0') << 24; if (*p == ' ' || *p == '\n') c = false; - if (c) x += (long)(*p-- - '0') << 28; if (*p == ' ' || *p == '\n') c = false; - if (c) x += (long)(*p-- - '0') << 32; if (*p == ' ' || *p == '\n') c = false; - if (c) x += (long)(*p-- - '0') << 36; - - xs[i] = x; - } - - radix_sort(n); - - p = &buffer[BUFFER_MAX - 1]; - char *last = p; - *p-- = '\n'; - for (int i = n - 1; i >= 0; i--) { - long x = xs[i]; - *p-- = (x & 0xf) + '0'; x >>= 4; - if (x) *p-- = (x & 0xf) + '0'; x >>= 4; - if (x) *p-- = (x & 0xf) + '0'; x >>= 4; - if (x) *p-- = (x & 0xf) + '0'; x >>= 4; - if (x) *p-- = (x & 0xf) + '0'; x >>= 4; - if (x) *p-- = (x & 0xf) + '0'; x >>= 4; - if (x) *p-- = (x & 0xf) + '0'; x >>= 4; - if (x) *p-- = (x & 0xf) + '0'; x >>= 4; - if (x) *p-- = (x & 0xf) + '0'; x >>= 4; - if (x) *p-- = (x & 0xf) + '0'; x >>= 4; - if (i > 0) *p-- = '\n'; - } - write(1, p + 1, last - p); -} -- cgit v1.2.3