提交记录 15733


用户 题目 状态 得分 用时 内存 语言 代码长度
AzusaCat wc2017b1. 【WC2017】挑战-任务1 Accepted 100 2.749 s 1562532 KB C++ 4.10 KB
提交时间 评测时间
2021-01-29 16:21:08 2021-01-29 16:21:13
unsigned int c[257],c1[257],c2[257],c3[257],c4[257],c5[257],c6[257],c7[257],c0[257],tmp[200000000];
void sort(unsigned *a, int n) {
	int dd=n-(n&7);
    for(register int j=0;j<dd;j+=8)
	{
		++c0[((a[j  ]>>(0))&255)];
		++c1[((a[j+1]>>(0))&255)];
		++c2[((a[j+2]>>(0))&255)];
		++c3[((a[j+3]>>(0))&255)];
		++c4[((a[j+4]>>(0))&255)];
		++c5[((a[j+5]>>(0))&255)];
		++c6[((a[j+6]>>(0))&255)];
		++c7[((a[j+7]>>(0))&255)];
	}
	switch(n&7)
	{
	    case 7:++c6[(a[dd+6]>>(0))&255];
	    case 6:++c5[(a[dd+5]>>(0))&255];
	    case 5:++c4[(a[dd+4]>>(0))&255];
	    case 4:++c3[(a[dd+3]>>(0))&255];
	    case 3:++c2[(a[dd+2]>>(0))&255];
	    case 2:++c1[(a[dd+1]>>(0))&255];
	    case 1:++c0[(a[dd  ]>>(0))&255];
	}
	for(register int j=0;j<=255;++j)
	{
		c[j]+=c0[j];
		c[j]+=c1[j];
		c[j]+=c2[j];
		c[j]+=c3[j];
		c[j]+=c4[j];
		c[j]+=c5[j];
		c[j]+=c6[j];
		c[j]+=c7[j];
		c0[j]=0;
		c1[j]=0;
		c2[j]=0;
		c3[j]=0;
		c4[j]=0;
		c5[j]=0;
		c6[j]=0;
		c7[j]=0;
	}
	for(register int j=1;j<=255;++j)c[j]+=c[j-1];
	for(register int j=n-1;j>=0;--j)tmp[--c[(a[j]>>(0))&255]]=a[j];
	for(register int j=0;j<=255;++j)c[j]=0;
	for(register int j=0;j<n;++j)a[j]=tmp[j];
    for(register int j=0;j<dd;j+=8)
	{
		++c0[((a[j  ]>>(8))&255)];
		++c1[((a[j+1]>>(8))&255)];
		++c2[((a[j+2]>>(8))&255)];
		++c3[((a[j+3]>>(8))&255)];
		++c4[((a[j+4]>>(8))&255)];
		++c5[((a[j+5]>>(8))&255)];
		++c6[((a[j+6]>>(8))&255)];
		++c7[((a[j+7]>>(8))&255)];
	}
	switch(n&7)
	{
	    case 7:++c6[(a[dd+6]>>(8))&255];
	    case 6:++c5[(a[dd+5]>>(8))&255];
	    case 5:++c4[(a[dd+4]>>(8))&255];
	    case 4:++c3[(a[dd+3]>>(8))&255];
	    case 3:++c2[(a[dd+2]>>(8))&255];
	    case 2:++c1[(a[dd+1]>>(8))&255];
	    case 1:++c0[(a[dd  ]>>(8))&255];
	}
	for(register int j=0;j<=255;++j)
	{
		c[j]+=c0[j];
		c[j]+=c1[j];
		c[j]+=c2[j];
		c[j]+=c3[j];
		c[j]+=c4[j];
		c[j]+=c5[j];
		c[j]+=c6[j];
		c[j]+=c7[j];
		c0[j]=0;
		c1[j]=0;
		c2[j]=0;
		c3[j]=0;
		c4[j]=0;
		c5[j]=0;
		c6[j]=0;
		c7[j]=0;
	}
	for(register int j=1;j<=255;++j)c[j]+=c[j-1];
	for(register int j=n-1;j>=0;--j)tmp[--c[(a[j]>>(8))&255]]=a[j];
	for(register int j=0;j<=255;++j)c[j]=0;
	for(register int j=0;j<n;++j)a[j]=tmp[j];
    for(register int j=0;j<dd;j+=8)
	{
		++c0[((a[j  ]>>(16))&255)];
		++c1[((a[j+1]>>(16))&255)];
		++c2[((a[j+2]>>(16))&255)];
		++c3[((a[j+3]>>(16))&255)];
		++c4[((a[j+4]>>(16))&255)];
		++c5[((a[j+5]>>(16))&255)];
		++c6[((a[j+6]>>(16))&255)];
		++c7[((a[j+7]>>(16))&255)];
	}
	switch(n&7)
	{
	    case 7:++c6[(a[dd+6]>>(16))&255];
	    case 6:++c5[(a[dd+5]>>(16))&255];
	    case 5:++c4[(a[dd+4]>>(16))&255];
	    case 4:++c3[(a[dd+3]>>(16))&255];
	    case 3:++c2[(a[dd+2]>>(16))&255];
	    case 2:++c1[(a[dd+1]>>(16))&255];
	    case 1:++c0[(a[dd  ]>>(16))&255];
	}
	for(register int j=0;j<=255;++j)
	{
		c[j]+=c0[j];
		c[j]+=c1[j];
		c[j]+=c2[j];
		c[j]+=c3[j];
		c[j]+=c4[j];
		c[j]+=c5[j];
		c[j]+=c6[j];
		c[j]+=c7[j];
		c0[j]=0;
		c1[j]=0;
		c2[j]=0;
		c3[j]=0;
		c4[j]=0;
		c5[j]=0;
		c6[j]=0;
		c7[j]=0;
	}
	for(register int j=1;j<=255;++j)c[j]+=c[j-1];
	for(register int j=n-1;j>=0;--j)tmp[--c[(a[j]>>(16))&255]]=a[j];
	for(register int j=0;j<=255;++j)c[j]=0;
	for(register int j=0;j<n;++j)a[j]=tmp[j];
    for(register int j=0;j<dd;j+=8)
	{
		++c0[((a[j  ]>>(24))&255)];
		++c1[((a[j+1]>>(24))&255)];
		++c2[((a[j+2]>>(24))&255)];
		++c3[((a[j+3]>>(24))&255)];
		++c4[((a[j+4]>>(24))&255)];
		++c5[((a[j+5]>>(24))&255)];
		++c6[((a[j+6]>>(24))&255)];
		++c7[((a[j+7]>>(24))&255)];
	}
	switch(n&7)
	{
	    case 7:++c6[(a[dd+6]>>(24))&255];
	    case 6:++c5[(a[dd+5]>>(24))&255];
	    case 5:++c4[(a[dd+4]>>(24))&255];
	    case 4:++c3[(a[dd+3]>>(24))&255];
	    case 3:++c2[(a[dd+2]>>(24))&255];
	    case 2:++c1[(a[dd+1]>>(24))&255];
	    case 1:++c0[(a[dd  ]>>(24))&255];
	}
	for(register int j=0;j<=255;++j)
	{
		c[j]+=c0[j];
		c[j]+=c1[j];
		c[j]+=c2[j];
		c[j]+=c3[j];
		c[j]+=c4[j];
		c[j]+=c5[j];
		c[j]+=c6[j];
		c[j]+=c7[j];
		c0[j]=0;
		c1[j]=0;
		c2[j]=0;
		c3[j]=0;
		c4[j]=0;
		c5[j]=0;
		c6[j]=0;
		c7[j]=0;
	}
	for(register int j=1;j<=255;++j)c[j]+=c[j-1];
	for(register int j=n-1;j>=0;--j)tmp[--c[(a[j]>>(24))&255]]=a[j];
	for(register int j=0;j<=255;++j)c[j]=0;
	for(register int j=0;j<n;++j)a[j]=tmp[j];
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #11.204 ms816 KBAcceptedScore: 34

Testcase #21.374 s762 MB + 996 KBAcceptedScore: 33

Testcase #32.749 s1525 MB + 932 KBAcceptedScore: 33


Judge Duck Online | 评测鸭在线
Server Time: 2024-11-24 22:22:44 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠