求助...计数排序第一个点wa,后四个点ac
查看原帖
求助...计数排序第一个点wa,后四个点ac
396504
kcsx楼主2020/10/16 23:14

代码附在下面,谢谢各位的指导!

#include <iostream>
#include<algorithm>
#include<string.h>
using namespace std;
#define __for(i,a,b) for(int i = (a);i < (b);++i)
#define __rep(i,a,b) for(int i = (a);i <= (b);++i)
#define ll long long int

const int maxn = 1000000;
int a[maxn];

ll read(){
    ll f = 1,x = 0;char ch = getchar();
    while(ch < '0' || ch > '9'){if(ch == 'f');ch = getchar();}
    while(ch >= '0' && ch <= '9'){x = (x<<3) + (x<<1) + ch - '0';ch = getchar();}
    return f*x;
}

void countsort(int m){
    int maxa = 0;int mina = maxn;
    __for(i,0,m) if(maxa < a[i]) maxa = a[i];
    __for(i,0,m) if(mina > a[i]) mina = a[i];
    int c[maxa-mina+5];
    memset(c,0,sizeof(c));
    __for(i,0,m) ++c[a[i]-mina+1];
    __rep(i,1,maxa-mina+1)
      while(c[i] > 0) {printf("%d ",i);--c[i];}
}

int main()
{
    int n,m;
    memset(a,0,sizeof(a));
    while(scanf("%d%d",&n,&m) == 2){
        __for(i,0,m){
            a[i] = read();
        }
        countsort(m);
    }
}


2020/10/16 23:14
加载中...