Problem G

来源:互联网 发布:qt tcp socket编程 编辑:程序博客网 时间:2024/05/01 10:44

分析: 多条件排序 +  数据统计

#include <iostream>#include <cstdio>#include <queue>#include <cstring>#include <cmath>#include <vector>#include <iomanip>#include <algorithm>//#include "myAlgorithm.h"#define MAXL 1000005#define INF 1e8using namespace std;int n;int a[MAXL];struct Stu{    char num[30];    int score;}stu[1005];bool cmp1(Stu a, Stu b){    if(a.score != b.score)    return a.score < b.score;    return (strcmp(a.num, b.num) >= 0);}bool cmp2(Stu a, Stu b){    if(a.score != b.score)    return a.score > b.score;    return (strcmp(a.num, b.num) <= 0);}int partion(int low, int high){    Stu key = stu[low];    while(low < high){        while(low < high && cmp1(key, stu[high])){           high--;        }        swap(stu[low], stu[high]);        while(low < high &&!cmp1(key, stu[low])){            low ++;        }        swap(stu[low], stu[high]);    }    return low;}void quickSort(int low, int high){    if(low < high){        int mid = partion(low, high);        quickSort(low, mid -1);        quickSort(mid + 1, high);    }}int N, M, G;int Pro[15];int m;bool isPro[15];int main(){    ///freopen("in.txt","w",stdout);    while(cin>>N, N){        cin>>M>>G;        for( int i = 1; i<=M; i++){           cin>>Pro[i];        }        for( int i = 0; i < N; i++){            cin>>stu[i].num>>m;            int p, score = 0;            for( int j = 1; j <= m; j++){                cin>>p;                score += Pro[p];            }stu[i].score = score;        }///stu input end;        quickSort(0, N - 1);        int count = 0;        for( int i = N- 1; i >= 0; i--){            if(stu[i].score >=G)            count++;        }        cout<<count<<endl;          for( int i = N - 1; i >= N - count; i--){            cout<<stu[i].num<<" "<<stu[i].score<<endl;        }    }    return 0;}


 

原创粉丝点击