/因为这道题之前做过一次,看了别人的算法思想用local跟galobal排序并插入,所以一写就是照着这个思想来的,记得第一次做的时候用sort分段排序,麻烦要记录起始位置,好像最后还没A,这次用别人的思想在比较函数出出了点问题,没有意识到别人直接用的string,而我用的字符串数组,比较时要加strcmp;小白啊,大神通篇都是库函数。。。。。
#include<cstdio>
#include<cstring>#include<algorithm>#include<vector>using namespace std;struct node { char id[15]; int score; int location; int lrank; int rank;};bool cmp(node a,node b){ if(a.score!=b.score) return a.score>b.score; else return strcmp(a.id,b.id)<0;}vector<node>local,galobal;int main(){ freopen("input.txt","r",stdin); int i,j,n,k; while(scanf("%d",&n)!=EOF) { for(i=1;i<=n;i++) { scanf("%d",&k); for(j=0;j<k;j++) { node s; scanf("%s %d",s.id,&s.score); s.location=i; local.push_back(s); } sort(local.begin(),local.end(),cmp); for(j=0;j<local.size();j++) { if(j!=0&&local[j].score==local[j-1].score)local[j].lrank=local[j-1].lrank; else local[j].lrank=j+1; } galobal.insert(galobal.end(),local.begin(),local.end()); local.clear(); } sort(galobal.begin(),galobal.end(),cmp); for(i=0;i<galobal.size();i++) { if(i!=0&&galobal[i].score==galobal[i-1].score)galobal[i].rank=galobal[i-1].rank; else galobal[i].rank=i+1; } printf("%d\n",galobal.size()); for(i=0;i<galobal.size();i++) { printf("%s %d %d %d\n",galobal[i].id,galobal[i].rank,galobal[i].location,galobal[i].lrank); } } return 0;}