Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define BUF_SIZE 4 * 1024 * 1024
- #define SEQ_SIZE 1000000
- int add(int* key, int* val, int size, int x) {
- if (size == 0) {
- key[0] = x;
- val[0] = 1;
- return 1;
- }
- for (int i = 0; i < size; i++) {
- if (key[i] == x) {
- val[i]++;
- return size;
- } else if (seq[i] > x) {
- for (int j = size; j >= i; j--) {
- key[j + 1] = key[j];
- val[j + 1] = val[j];
- }
- key[i] = x;
- val[i] = 1;
- return size + 1;
- }
- }
- }
- if (file) {
- unsigned char* buf = malloc(sizeof(unsigned char) * BUF_SIZE);
- int* zero_k = malloc(sizeof(int) * SEQ_SIZE);
- int* one_k = malloc(sizeof(int) * SEQ_SIZE);
- int* zero_v = malloc(sizeof(int) * SEQ_SIZE);
- int* one_v = malloc(sizeof(int) * SEQ_SIZE);
- int size0 = 0;
- int size1 = 1;
- int len0 = 0;
- int len1 = 0;
- while (!feof(file)) {
- size_t len = fread(buf, sizeof(unsigned char), BUF_SIZE, file);
- for (int i = 0; i < len; i++) {
- for (int j = 7; j >= 0; j--) {
- int x = !!(buf[i] & (1 << j));
- if (x) {
- if (len0 > 0)
- size0 = add(zero_k, zero_v, size0, len0);
- len0 = 0;
- len1++;
- } else {
- if (len1 > 0)
- size1 = add(one_k, one_v, size1, len1);
- len1 = 0;
- len0++;
- }
- }
- }
- }
- if (len0 > 0)
- size0 = add(zero_k, zero_v, size0, len0);
- if (len1 > 0)
- size1 = add(one_k, one_v, size1, len1);
- for (int i = 0; i < size0; i++) {
- printf("%d %d ", zero_k[i], zero_v[i]);
- }
- for (int i = 0; i < size1; i++) {
- printf("%d %d ", one_k[i], one_v[i]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement