杭电acm 1084 What Is Your Grade? 比较考人的简单题

来源:互联网 发布:大数据获取方式 编辑:程序博客网 时间:2024/05/28 06:04
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;struct Point{      int p;      int s;      int pos;      int t;};Point p[105];int n;int sum[6],tol[6];bool cmp1(const Point& lhs,const Point& rhs)//对所有的成员按照解题数从小到大排序,如解题数相同则按照时间从少到多排序{      if(lhs.p == rhs.p)            return lhs.t<rhs.t;      else            return lhs.p < rhs.p;}bool cmp2(const Point& lhs,const Point& rhs)//按照编号排序{      return lhs.pos < rhs.pos;}int main(){      while(scanf("%d",&n)!=EOF && (n>=0))      {            int co,h,m,s;            memset(sum,0,sizeof(sum));            memset(tol,0,sizeof(tol));            for(int i=0;i<n;i++)            {                  scanf("%d %d:%d:%d",&co,&h,&m,&s);                  p[i].pos = i;                  sum[co]++;//解题数相同的有多少人                  p[i].p = co;                  p[i].t = h*3600 + m*60 + s;            }            for(int i=1;i<=5;i++)//这是求出解题数少于i道的总人数            {                  tol[i] = tol[i-1]+sum[i-1];            }            sort(p,p+n,cmp1);            for(int i=0;i<n;i++)            {                  p[i].s = p[i].p*10+50;                  if(p[i].s == 100 || p[i].s == 50)   continue;                  if(i-tol[p[i].p] < sum[p[i].p]/2)                        p[i].s += 5;            }            sort(p,p+n,cmp2);            for(int i=0;i<n;i++)            {                  printf("%d\n",p[i].s);            }            printf("\n");      }      return 0;}

0 0
原创粉丝点击