PAT-1005.德才論(25)

#include

using namespace std;

 int N,L,H;

struct stu 

{

int B,C,D,Z;

};

void order(stu s[],int X);

int main()

{

stu s[100001];

int i,j,a[5]={0},M=0;

stu A1[100001],A2[100001],A3[100001],A4[100001];

cin>>N>>L>>H;

for(i=0;i<N;i++)

{

scanf(“%d%d%d”,&s[i].B,&s[i].D,&s[i].C);

s[i].Z=s[i].D+s[i].C;

if(s[i].D>=H&&s[i].C>=H)

{

A1[a[0]]=s[i];a[0]++;

}

else if(s[i].D>=H&&s[i].C>=L)

{

A2[a[1]]=s[i];a[1]++;

}

else if(s[i].D>=s[i].C&&s[i].C>=L)

{

A3[a[2]]=s[i];a[2]++;

}

else if(s[i].D>=L&&s[i].C>=L)

{

A4[a[3]]=s[i];a[3]++;

}

}

M=a[1]+a[2]+a[3]+a[0];

order(A1,a[0]);

order(A2,a[1]);

order(A3,a[2]);

order(A4,a[3]);

printf(“%d”,M);

for(j=0;j<a[0];j++)

printf(“\n%d %d %d”,A1[j].B,A1[j].D,A1[j].C);

for(j=0;j<a[1];j++)

printf(“\n%d %d %d”,A2[j].B,A2[j].D,A2[j].C);

for(j=0;j<a[2];j++)

printf(“\n%d %d %d”,A3[j].B,A3[j].D,A3[j].C);

for(j=0;j<a[3];j++)

printf(“\n%d %d %d”,A4[j].B,A4[j].D,A4[j].C);

return 0;

}

void order(stu s[],int X)

{

int i,j,k;

stu temp;

for(i=1;i<X;i++)

{

for(j=0;j<i;j++)

{

if(s[i].Z>s[j].Z)

{

temp=s[i];

for(k=i;k>j;k–)

s[k]=s[k-1];

s[k]=temp;

break;

}

else if(s[i].Z==s[j].Z)

{

if(s[i].D>s[j].D)

{

temp=s[i];

for(k=i;k>j;k–)

s[k]=s[k-1];

s[k]=temp;

break;

}

else if(s[i].D==s[j].D)

{

if(s[i].B<s[j].B)

{

temp=s[i];

for(k=i;k>j;k–)

s[k]=s[k-1];

s[k]=temp;

break;

}}}}}}

/*****************************************/

輸入的時候直接判斷該輸入輸入哪個等級的人才,然後將其存入對應的結構體數組。然後對每個結構體數組按要求進行排序輸出。使用printf輸出可以比cout輸出節省運行時間,避免運行超時。

点赞