首页 > 代码库 > HDU 2409 Team Arrangement (结构体排序)
HDU 2409 Team Arrangement (结构体排序)
题目链接:HDU 2409 Team Arrangement
题意:给出22个人(编号,名字,踢的位置,在队里的时间),让我们选DD-MM-SS的阵型+一个守门员。在选出队长(时间在最久的就是队长,时间相同编号大为队长),选人的顺序是从编号小的开始。
结构体排序就好了,注意出输出是按队长,D,M,S的顺序,选队长记录队长的编号(而不是下标,我的代码之后还要排序)。
AC代码:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; struct node { int num; char name[50]; char p[5]; int time; int ok; }; struct node p[50]; int get_time(char s[]) { int len=strlen(s),i; int t1,t2,flag,sum; t1=t2=0; flag=0; sum=0; for(i=0;i<len;i++) { if(s[i]==' ') { sum+=(t2-t1+1); flag=t1=t2=0; continue; } if(s[i]=='-') { flag=1; continue; } if(!flag) t1=t1*10+s[i]-'0'; else t2=t2*10+s[i]-'0'; } sum+=t2-t1+1; return sum; } bool cmp(node a,node b) { return a.num<b.num; } bool cmp2(node a,node b) { if(a.ok!=b.ok) return a.ok<b.ok; return a.num<b.num; } int main() { int i; char s[500],hh[500]; int dd,mm,ss; int flag = 0; while(scanf("%d",&p[0].num)!=EOF,p[0].num) { for(i=0;i<22;i++) p[i].ok=0; int temp; scanf("%s %s",p[0].name,p[0].p); getchar(); gets(s); p[0].time=get_time(s); for(i=1;i<22;i++) { scanf("%d %s %s",&p[i].num,p[i].name,p[i].p); getchar(); gets(s); p[i].time=get_time(s); //printf("%d....\n",p[i].time); } scanf("%s",hh); dd=hh[0]-'0'; mm=hh[2]-'0'; ss=hh[4]-'0'; int mark=0; sort(p,p+22,cmp); for(i=0;i<22;i++) { if(p[i].p[0]=='G') { p[i].ok=1; mark=1; break; } } int count=0; for(i=0;i<22;i++) { if(p[i].p[0]=='D') { if(dd==0) break; p[i].ok=2; dd--; } } for(i=0;i<22;i++) { if(p[i].p[0]=='M') { if(mm==0) break; p[i].ok=3; mm--; } } for(i=0;i<22;i++) { if(p[i].p[0]=='S') { if(ss==0) break; p[i].ok=4; ss--; } } if(mark!=1 || dd!=0 || mm!=0 || ss!=0)//没选满 { printf("IMPOSSIBLE TO ARRANGE\n\n"); continue; } int maxn=-1,max_i; for(i=0;i<22;i++) { if(p[i].ok) { if(p[i].time>=maxn) { maxn=p[i].time; max_i=i; if(p[i].time==maxn) { if(p[i].num>p[max_i].num) max_i=i; } } } } printf("%d %s %s\n",p[max_i].num,p[max_i].name,p[max_i].p); int col=p[max_i].num; sort(p,p+22,cmp2); for(i=0;i<22;i++) { if(p[i].ok && col!=p[i].num) printf("%d %s %s\n",p[i].num,p[i].name,p[i].p); } printf("\n"); } return 0; }
HDU 2409 Team Arrangement (结构体排序)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。