Code: Select all
#include <cstdlib>
#include <iostream>
using namespace std;
#define MSIZE 10003
struct qq
{
int ori,mod;
}q[MSIZE];
int modcomp(const void *a, const void *b)
{
qq *q1 = (qq*) a;
qq *q2 = (qq*) b;
return q1->mod - q2->mod;
}
int upcomp(const void *a, const void *b){
return (*(int *)a) - (*(int*)b);
}
int dncomp(const void *a, const void *b){
return (*(int *)b) - (*(int*)a);
}
int main()
{
int modkind[MSIZE];
int odd[MSIZE], even[MSIZE];
int N, M;
int count, modsize;
int ptr;
while(cin >> N >> M && N != 0 || N != 0){
for(count = 0; count < N; count++) {
cin >> q[count].ori;
q[count].mod = q[count].ori % M;
}
qsort(q, N, sizeof(qq), modcomp);
for(int i = 0; i < MSIZE; i++)
modkind[i] = 0;
modkind[0] = 1;
modsize = 1;
for(int i = 0; i < N - 1; i++){
if(q[i].mod != q[i+1].mod){
modsize++;
modkind[modsize-1]++;
}
else
modkind[modsize-1]++;
}
for(int i = 0; i < MSIZE; i++){
odd[i] = 0;
even[i] = 0;
}
ptr = 0;
int ansodd[modsize][MSIZE], anseven[modsize][MSIZE];
for(int k = 0; k < modsize; k++){
for(int j = 0; j < modkind[k]; j++){
if(q[ptr].ori % 2 != 0){
ansodd[k][odd[k]] = q[ptr].ori;
odd[k]++;
}
else{
anseven[k][even[k]] = q[ptr].ori;
even[k]++;
}
ptr++;
}
}
for(int p = 0; p < modsize; p++){
qsort(ansodd[p], odd[p], sizeof(int), dncomp);
qsort(anseven[p], even[p], sizeof(int), upcomp);
}
cout << N << " " << M << endl;
for(int y = 0; y < modsize; y++){
for(int z = 0; z < odd[y]; z++)
cout << ansodd[y][z] << endl;
for(int z = 0; z < even[y]; z++)
cout << anseven[y][z] << endl;
}
}
cout << 0 << " " << 0 << endl;
return 0;
}
I don't know what's wrong in my code.
It gets a lot of runtime errors.
But I have use many test data and it outputs right answers.
Can anyone explain this strange status.
Please help me, thanks a lot.