PTA乙级1015,德才论

分析:
设置cmp()比较函数;
建立二维数组vector() v[4] ,用于存储4种不同类型的人

    #include
    using namespace std;
    
    struct node{
        int num,de,cai;//准考证号,德分,才分
    };
    
    int cmp(struct node a,struct node b){
        if((a.de+a.cai)!=(b.de+b.cai))//a,b两人德才总分不同
            return (a.de+a.cai)>(b.de+b.cai);//按总分高的排序
        else if(a.de!=b.de)
            return a.de>b.de;//德分不同,按德分排序
        else
            return a.num<b.num;//德才总分和德分都相同,按准考证号从小到大排
    }
    
    int main(){
        int n,low,high;
        scanf("%d %d %d",&n,&low,&high);
        vector<node> v[4];//二维数组,存储四种不同类型的人
        node temp;
        int total=n;
    
        for(int i=0;i<n;i++){
            scanf("%d %d %d",&temp.num,&temp.de,&temp.cai);
            if(temp.de<low || temp.cai<low)//德分和才分有一个低于low线
                total--;//不存入数组,总数减一
            else if(temp.de>=high && temp.cai>=high)//德分和才分都高于优先线
                v[0].push_back(temp);
            else if(temp.de>=high && temp.cai<high)//德分高于优先线,才分低于优先线
                v[1].push_back(temp);
            else if(temp.de<high && temp.cai<high && temp.de>=temp.cai)//德才分均低于优先线,但德分高于才分
                v[2].push_back(temp);
            else//德分和才分都低于优先线,才分高于德分
                v[3].push_back(temp);
        }
    
        printf("%d\n",total);
        for(int i=0;i<4;i++){
            sort(v[i].begin(),v[i].end(),cmp);
            for(int j=0;j<v[i].size();j++)
                printf("%d %d %d\n",v[i][j].num,v[i][j].de,v[i][j].cai);
        }
        return 0;
    }

你可能感兴趣的:(PTA乙级)