hdu 1084 (水,排序)

来源:互联网 发布:椎管螺纹编程实例 编辑:程序博客网 时间:2024/04/19 18:57

点击打开链接


有点恶心的排序,不能改变原来的下表,得用四个数组分别存做题数为4,2,3,1的下表,并且在求排名是,要对下班进行排序(还好数据小可以用冒泡)。。


#include"stdio.h"#include"string.h"#include"stdlib.h"struct node{int p,t,mark;}A[101];int cmp(const void*a,const void*b){return *((int*)a)-*((int*)b);}void fun(int *a,int n){int i,j,t;for(i=0;i<n;i++){for(j=i+1;j<n;j++){if(A[a[j]].t<A[a[i]].t){t=a[i];a[i]=a[j];a[j]=t;}}}for(i=0;i<n;i++)A[a[i]].mark=i+1;}int main(){int i;//数组ai存做题数为i的学生的下标,li为长度int a1[101],l1;int a2[101],l2;int a3[101],l3;int a4[101],l4;int n,h,m,s,p;while(scanf("%d",&n),n>0){l1=l2=l3=l4=0;for(i=0;i<n;i++){scanf("%d %d:%d:%d",&p,&h,&m,&s);A[i].p=p;A[i].t=h*3600+m*60+s;if(p==4)a4[l4++]=i;if(p==3)a3[l3++]=i;if(p==2)a2[l2++]=i;if(p==1)a1[l1++]=i;}fun(a1,l1);fun(a2,l2);fun(a3,l3);fun(a4,l4);for(i=0;i<n;i++){if(A[i].p==5)printf("100\n");else if(A[i].p==0)printf("50\n");else if(A[i].p==4){if(A[i].mark<=l4/2)printf("95\n");else printf("90\n");}else if(A[i].p==3){if(A[i].mark<=l3/2)printf("85\n");else printf("80\n");}else if(A[i].p==2){if(A[i].mark<=l2/2)printf("75\n");else printf("70\n");}else if(A[i].p==1){if(A[i].mark<=l1/2)printf("65\n");else printf("60\n");}}printf("\n");}return 0;}