zoukankan      html  css  js  c++  java
  • PAT A1025 Ranking 【排序】25

    解题思路

    1 用结构体Testee记录学生的信息:分数、考场、考号、考场排名、总排名
    2 每个考场学生录入结束后,对考场内考生排名,并设置名次
    3 所有考场学生录入结束后,对所有考场内考生排名,并设置名次
    4 排序规则:按照名次非递减(即按照分数非递增),同名次(即同分数)的考生,按照考号非递减排序

    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    struct Testee {
    	string id;
    	int lid; //考场号 
    	int sc; //分数
    	int rkl; //本地排名
    	int rka; //总排名
    };
    bool cmp(Testee &t1,Testee &t2) {
    	if(t1.sc!=t2.sc)return t1.sc>t2.sc;
    	else return t1.id<t2.id;
    }
    void setrkl(vector<Testee>&ts) {
    	ts[0].rkl=1;
    	int k = ts.size();
    	for(int i=1; i<k; i++) {
    		ts[i].rkl=i+1;
    		if(ts[i].sc==ts[i-1].sc) {
    			ts[i].rkl=ts[i-1].rkl;
    		}
    	}
    }
    void setrkall(vector<Testee>&ts) {
    	ts[0].rka=1;
    	int k = ts.size();
    	for(int i=1; i<k; i++) {
    		ts[i].rka=i+1;
    		if(ts[i].sc==ts[i-1].sc) {
    			ts[i].rka=ts[i-1].rka;
    		}
    	}
    }
    int main() {
    	int n,k;
    	scanf("%d",&n);
    	Testee t;
    	vector<Testee> vts; //本地考生信息
    	vector<Testee> vtsall; //全部考生信息
    	for(int i=1; i<=n; i++) {
    		scanf("%d",&k);
    		vts.clear();
    		vts.resize(k);
    		for(int j=0; j<k; j++) {
    			cin>>vts[j].id>>vts[j].sc;
    			vts[j].lid=i; //考场号 
    //			vtsall.push_back(vts[j]); //加入总榜
    		}
    		sort(vts.begin(),vts.end(),cmp); //本地排名
    		setrkl(vts);
    		vtsall.insert(vtsall.end(),vts.begin(),vts.end());
    	}
    	sort(vtsall.begin(),vtsall.end(),cmp); //总榜排名
    	setrkall(vtsall);
    	printf("%d
    ",vtsall.size());
    	for(int i=0;i<vtsall.size();i++){
    		Testee t = vtsall[i];
    		printf("%s %d %d %d
    ",t.id.c_str(),t.rka,t.lid,t.rkl); 
    	}
    	return 0;
    }
    
  • 相关阅读:
    程序员编程武器大盘点
    Opencv 视频转为图像序列
    C/C++ 浮点数比较问题
    C/C++ Swap without using extra variable
    C/C++ Quick Sort Algorithm
    LaTeX 插图片
    LaTeX 基本的公式符号命令
    天龙八部服务器端共享内存的设计(1/3)
    天龙八部服务器端共享内存的设计(2/3)
    天龙八部服务器端共享内存的设计(2/3)
  • 原文地址:https://www.cnblogs.com/houzm/p/14408536.html
Copyright © 2011-2022 走看看