POJ 2379

题意:模拟ACM Ranklist,按AC数,罚时,队伍编号排序。

题解:注意2种,A了再交,输出不是按照时间顺序的。

View Code
 1 #include<cstdio>

 2 #include<cstring>

 3 #include<algorithm>

 4 using namespace std;

 5 struct Data

 6 {

 7     int id,tot,ti;

 8     int pr[30];

 9     void init(int _id)

10     {

11         id=_id;

12         tot=ti=0;

13         memset(pr,0,sizeof(pr));

14     }

15     bool operator<(const Data &ne)const

16     {

17         if(tot!=ne.tot)

18             return tot>ne.tot;

19         if(ti!=ne.ti)

20             return ti<ne.ti;

21         return id<ne.id;

22     }

23 }po[1005];

24 void ac(int id,int p,int t)

25 {

26     if(po[id].pr[p]==-1)

27         return;

28     else

29     {

30         po[id].tot++;

31         po[id].ti+=po[id].pr[p]*1200+t;

32         po[id].pr[p]=-1;

33     }

34 }

35 void  wa(int id,int p)

36 {

37     if(po[id].pr[p]==-1)

38         return;

39     else

40         po[id].pr[p]++;

41 }

42 struct Event

43 {

44     int id,p,t,a;

45     bool operator<(const Event &ne)const

46     {

47         return t<ne.t;

48     }

49 }EV[1005];

50 int main()

51 {

52     int c,n;

53     while(scanf("%d%d",&c,&n)!=EOF)

54     {

55         for(int i=1;i<=c;i++)

56             po[i].init(i);

57         for(int i=0;i<n;i++)

58         {

59             int id,p,t,a;

60             scanf("%d%d%d%d",&EV[i].id,&EV[i].p,&EV[i].t,&EV[i].a);

61         }

62         sort(EV,EV+n);

63         for(int i=0;i<n;i++)

64         {

65             if(EV[i].a)

66                 ac(EV[i].id,EV[i].p,EV[i].t);

67             else

68                 wa(EV[i].id,EV[i].p);

69         }

70         sort(po+1,po+c+1);

71         for(int i=1;i<c;i++)

72             printf("%d ",po[i].id);

73         printf("%d\n",po[c].id);

74     }

75     return 0;

76 }

你可能感兴趣的:(poj)