int kod(int *cnts, int i, int *j, int *k, int nsyms) { int r; if(*k > nsyms || i > *j && cnts[*j] < cnts[*k]) { r = cnts[*j]; cnts[(*j)++] = i; } else r = cnts[(*k)++]; return r; }
int huff(int *cnts, int nsyms) { int i = 0, j = 0, k = 0; for(i=0;i<nsyms-1;i++) cnts[i] = kod(cnts, i, &j, &k, nsyms) + kod(cnts, i, &j, &k, nsyms); cnts[i] = 2; j = i-1; k = j; while(k) { while(j > 0 && cnts[j-1] >= k) j--; cnts[i--] -= k - j; cnts[i] = (k - j)*2; k = j; } return nsyms - i; }
Name:
Anonymous2017-07-17 10:46
>>50 Thats a waste of space #include <stdio.h> #include <string.h> int main(int argc,char**argv){int i; if(argc!=2){fprintf(stderr,"usage: %s string\n",argv[0]);return 1;} if(!strcmp(argv[1],"//")){goto step_6;}; if(!argv[1][0]){goto single_dot;} for(i=0;i<strlen(argv[1]);i++){if(argv[1][i]!='/')goto notslash;} goto single_slash;notslash:for(i=strlen(argv[1])-1;argv[1][i]=='/';i--){argv[1][i]=0;} if(strrchr(argv[1],'/')){for(i=strlen(argv[1])-1;argv[1][i]&&argv[1][i]!='/';i--){argv[1][i]=0;}; step_6:for(i=strlen(argv[1])-1;argv[1][i]&&argv[1][i]=='/';i--){argv[1][i]=0;} if(argv[1][0]){printf("%s\n",argv[1]);}else{single_slash: printf("/\n");}}else{single_dot:printf(".\n");};return 0;}