ZOJ 3770 : Ranking System (第14届浙江大学程序设计竞赛 D) - 结构体排序,vector

来源:互联网 发布:淘宝买家秀福利的店铺 编辑:程序博客网 时间:2024/06/05 20:46
【分析】

先按题目要求排序——我是写了俩排序函数,再按照等级人数限制进行划分即可。

读入的各种数据存在结构体中,对结构体按成员排序用vector很方便——今天现学的——书到用时方恨少啊,唉。

#include<cstdio>#include<cstring>#include<string>#include<vector>#include<algorithm>using namespace std;const int N=2005;int d[7];struct Memb{int sc,year,month,day,num,deg;char id[11];}memb;int cmp1(Memb p1,Memb p2){if(p1.sc!=p2.sc)return p1.sc>p2.sc;else if(p1.year!=p2.year)return p1.year<p2.year;else if(p1.month!=p2.month)return p1.month<p2.month;else if(p1.day!=p2.day)return p1.day<p2.day;elsereturn p1.id>p2.id;}int cmp2(Memb p1,Memb p2){return p1.num<p2.num;}int main(){char ss[11];int t,n,m,nn,p,i,j;vector<Memb> vec;scanf("%d",&t);while(t--){m=p=0;scanf("%d",&n);for(i=0;i<n;i++){scanf("%s",&memb.id);scanf("%d/%d/%d %d",&memb.year,&memb.month,&memb.day,&memb.sc);memb.num=i+1;if(memb.sc==0){m++;memb.deg=1;}vec.push_back(memb);}sort(vec.begin(),vec.end(),cmp1);nn=n-m;d[6]=int(nn*0.03),d[5]=int(nn*0.07),d[4]=int(nn*0.2),d[3]=int(nn*0.3),d[2]=nn-d[6]-d[5]-d[4]-d[3];for(i=6;i>1;i--){for(j=0;j<d[i];j++){vec[p+j].deg=i;}p+=d[i];}/*printf("nn:%d p:%d",nn,p);puts("");for(i=0;i<n;i++)printf("%s %d %d LV%d\n",vec[i].id,vec[i].num,vec[i].sc,vec[i].deg);puts("");*/sort(vec.begin(),vec.end(),cmp2);for(i=0;i<n;i++)printf("LV%d\n",vec[i].deg);vector<Memb>().swap(vec);}return 0;}



由这道水题学到的新东西有:
vector<Memb>().swap(vec);用于清空vector,包括回收内存哦。
sort(vec.begin(),vec.end(),cmp2);以cmp2()函数的要求对vec容器排序
vec.push_back(memb);这样将结构体存到vector中
0 0
原创粉丝点击