Sample Input:
2 5 1234567890001 95 1234567890005 100 1234567890003 95 1234567890002 77 1234567890004 85 4 1234567890013 65 1234567890011 25 1234567890014 100 1234567890012 85Sample Output:
9 1234567890005 1 1 1 1234567890014 1 2 1 1234567890001 3 1 2 1234567890003 3 1 2 1234567890004 5 1 4 1234567890012 5 2 2 1234567890002 7 1 5 1234567890013 8 2 3 1234567890011 9 2 4
#include <iostream> #include <string> #include <vector> #include <iomanip> #include <map> #include <algorithm> using namespace std; struct STUDENT { string regnum; int score; int location; int totalrank; int locationrank; STUDENT() { score = 0; location = 0; totalrank = 0; locationrank = 0; } }; bool greatermark(const STUDENT& s1,const STUDENT& s2) { return s1.score > s2.score; } bool lessregnum(const STUDENT& s1,const STUDENT& s2) { return s1.regnum < s2.regnum; } bool sortByScore(STUDENT a,STUDENT b) { if(a.score != b.score) return a.score > b.score; return a.regnum < b.regnum; } int main() { int N; cin>>N; int i = 0; vector<STUDENT> VArray[100]; while(N--) { int K; cin>>K; vector<STUDENT> V; while(K--) { STUDENT stu; cin>>stu.regnum>>stu.score; stu.location = i + 1; V.push_back(stu); } sort(V.begin(), V.end(), sortByScore); int forword = -1; int irank = 0; int realrank = 0; vector<STUDENT>::iterator iter = V.begin(); while(iter != V.end()) { ++realrank; if (forword != (*iter).score) { irank = realrank; (*iter).locationrank = realrank; forword = (*iter).score; } else { (*iter).locationrank = irank; } iter++; } VArray[i] = V; i++; } vector<STUDENT> VSum; for (int i = 0; i < 100; i++) { VSum.insert(VSum.end(),VArray[i].begin(),VArray[i].end()); } sort(VSum.begin(), VSum.end(), sortByScore); int forword = -1; int irank = 0; int realrank = 0; vector<STUDENT>::iterator iter = VSum.begin(); while(iter != VSum.end()) { ++realrank; if (forword != (*iter).score) { irank = realrank; (*iter).totalrank = realrank; forword = (*iter).score; } else { (*iter).totalrank = irank; } iter++; } cout<<VSum.size(); cout.setf(ios::fixed); for (int i = 0; i < VSum.size(); i++) { cout<<endl; cout<<VSum[i].regnum<<" "<<VSum[i].totalrank<<" "<<VSum[i].location<<" "<<VSum[i].locationrank; } }