- 1 名前:デフォルトの名無しさん [02/04/15 12:09]
- 7行×79文字なら言語は問いません。
過去作品は>>2-5を参照。 ■前スレ pc.2ch.net/test/read.cgi/tech/984182993/
- 386 名前:デフォルトの名無しさん mailto:sage [02/06/22 01:20]
- >>385
#include <stdlib.h> typedef unsigned char b;e(b*s,b*d,int c){unsigned*o,i=0,r;o=calloc(65536,4);c-- ;for(i;i<c;i++)o[s[i]<<8|s[i+1]]++;o[s[c]<<8|*s]++;for(i=1;i<65536;i++)o[i]+=o[ i-1];d[--o[s[c]<<8|*s]]=s[i=c-1];for(;i;i--)d[--o[s[i]<<8|s[i+1]]]=s[i-1];r=--o [*s<<8|s[1]];d[r]=s[c];free(o);return r;} 一応、限定ソートなり。
- 387 名前:デフォルトの名無しさん mailto:sage [02/06/22 01:44]
- こっちは復元
#include <stdlib.h> typedef unsigned char B;void d(B*s,B*d,int c,unsigned x){unsigned*o,i,a=0,t[256 ];memset(t,0,1024);for(i=--c;i;i--)t[s[i]]++;o=calloc(65536,4);for(;i<256;i++){ memset(d+a,i,t[i]);a+=t[i];}for(i=0;i<=c;i++)o[(s[i]<<8)+d[i]]++;for(i=1;i< 65536;i++)o[i]+=o[i-1];*d=d[x];d[c]=s[x];d[c-1]=s[--o[(d[c]<<8)+*d]];for(i=c;i> 2;i--)d[i-2]=s[--o[d[i-1]<<8|d[i]]];free(o);}
|

|