HDU 2115
来源:互联网 发布:dreamweaver做淘宝分类 编辑:程序博客网 时间:2024/05/16 18:50
这道题目一看就知道是用结构体做,因为有两个限制条件,一下是两个代码:(代码不同,是对字符串进行排序所用的方法不同)#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <string>//用字符串string来比较大小一定要加这个头文件using namespace std;struct p{ string name; int hour; int fen; int time; int paiming;} f[11];int cmp(p x, p y){ if(x.hour==y.hour) { if(x.fen==y.fen) { //return strcmp(x.name,y.name)<0?1:0; return x.name<y.name; } else return x.fen<y.fen; } else return x.hour<y.hour;}int main(){ int n,i; int tcase=1; while(scanf("%d",&n),n) { for(i=0; i<n; i++) { cin>>f[i].name; scanf("%d:%d",&f[i].hour,&f[i].fen); f[i].time=60*f[i].hour+f[i].fen; } sort(f,f+n,cmp); f[0].paiming=1; for(i=1; i<n; i++) { if(f[i].time==f[i-1].time) { f[i].paiming=f[i-1].paiming; } else f[i].paiming=i+1; } if(tcase!=1) { printf("\n"); } printf("Case #%d\n",tcase++); for(i=0; i<n; i++) { cout<<f[i].name<<" "; printf("%d\n",f[i].paiming); } } return 0;}二:#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <string>using namespace std;struct p{ string name; int hour; int fen; int time; int paiming;} f[11];int cmp(p x, p y){ if(x.hour==y.hour) { if(x.fen==y.fen) { return strcmp(x.name,y.name)<0?1:0;//这里如果两个字符串相等的话就==0,如果第一个字符串比第二个字符串小==-1,如果第一个字符串比第二个字符串大==1;这是strcmp()函数 } else return x.fen<y.fen; } else return x.hour<y.hour;}int main(){ int n,i; int tcase=1; while(scanf("%d",&n),n) { for(i=0; i<n; i++) { cin>>f[i].name; scanf("%d:%d",&f[i].hour,&f[i].fen); f[i].time=60*f[i].hour+f[i].fen; } sort(f,f+n,cmp); f[0].paiming=1; for(i=1; i<n; i++) { if(f[i].time==f[i-1].time) { f[i].paiming=f[i-1].paiming; } else f[i].paiming=i+1; } if(tcase!=1) { printf("\n"); } printf("Case #%d\n",tcase++); for(i=0; i<n; i++) { cout<<f[i].name<<" "; printf("%d\n",f[i].paiming); } } return 0;}