(排序EX)P1093 奖学金

题解:

#include<iostream>
using namespace std;
int r=0;
void swap(int &a,int &b){
  int t=a;
  a=b;
  b=t;
 }
void sort(int s[],int l,int r,int n[],int c[])
{
    int mid=s[(l+r)/2];
    int i=l,j=r;
    do{
        while(s[i]>mid) i++;
        while(s[j]<mid) j--;
        if(i<=j)
        {
            swap(s[i],s[j]);
            swap(n[i],n[j]);
            swap(c[i],c[j]);
            i++;
            j--;
        }
    }while(i<=j);
    if(l<j) sort(s,l,j,n,c);
    if(i<r) sort(s,i,r,n,c);
}

int main()
{
 int n;
 cin>>n;
 int s[n],temp,num[n],c[n];
 for(int i=0;i<n;i++){
  s[i]=0;
  num[i]=i+1;
  for(int j=0;j<3;j++){
   if(j==0){
    cin>>c[i];
    s[i]+=c[i];
   }else{
    cin>>temp;
    s[i]+=temp;
   }
  }
 }
 sort(s,0,n-1,num,c);
 int begin=0,end=0;
 for(int i=0;i<n-1;i++){
  if(s[i]==s[i+1]){
   begin=i;
   i++;
   if(i+1!=n){
    while(s[i]==s[i+1]){
     i++;
     if(i+1==n){
      break;
     }
    }
   }
   end=i;
   sort(c,begin,end,num,s);
  }
 }
 
 for(int i=0;i<5;i++){
  cout<<num[i]<<" "<<s[i]<<endl;
 }
 return 0;
}

猜你喜欢

转载自www.cnblogs.com/lijiahui-123/p/12325026.html