杭電acm 1084 What Is Your Grade? 比較考人的簡單題
阿新 • • 發佈:2019-01-10
#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; }