1007 奥运排序问题

1007 奥运排序问题

http://ac.jobdu.com/problem.php?pid=1007
这道题目有个隐蔽的地方,就是要求排序的m个国家号并不一定按序给出,因此输出的时候必须按照给定的顺序输出。
我之前就是因为用的sort排序自动有低到高输出导致WA
下面的代码已AC,我是新手,欢迎交流。
 1
 #include <iostream>
 2 #include <vector>
 3 #include <cstdio>
 4  using  namespace std;
 5 
 6  struct Nation
 7 {
 8      int gold,medal;
 9      double pop,gpp,mpp;
10 };
11 
12  int main()
13 {
14     freopen("in.txt","r",stdin);
15      int n,m,rk,md;
16      int i,*sel;
17     Nation nt;
18     vector<Nation> nvec,svec;
19      while(scanf("%d%d", &n,&m)!=EOF)
20     {
21         nvec.clear();
22          for(i=0; i<n; ++i)
23         {
24             scanf("%d%d%lf", &(nt.gold),&(nt.medal),&(nt.pop));
25             nt.gpp = ( double)nt.gold/nt.pop;
26             nt.mpp = ( double)nt.medal/nt.pop;
27             nvec.push_back(nt);
28         }
29         sel =( int *)malloc( sizeof( int)*m);
30         svec.clear();
31          for(i=0; i<m; ++i)
32         {
33             scanf("%d", &sel[i]);
34             svec.push_back(nvec.at(sel[i]));
35         }
36          for(size_t ix =0; ix <svec.size(); ++ix)
37         {
38              int rank[4]={1,1,1,1};
39             
40              for(i=0; i<m; ++i)
41             {
42                  if(nvec[sel[i]].gold > svec[ix].gold)
43                     ++rank[0];
44             }
45              for(i=0; i<m; ++i)
46             {
47                  if(nvec[sel[i]].medal > svec[ix].medal)
48                     ++rank[1];
49             }
50              for(i=0; i<m; ++i)
51             {
52                  if(nvec[sel[i]].gpp > svec[ix].gpp)
53                     ++rank[2];
54             }
55              for(i=0; i<m; ++i)
56             {
57                  if(nvec[sel[i]].mpp > svec[ix].mpp)
58                     ++rank[3];
59             }
60              if(rank[0]>rank[1])
61             {
62                 rk=rank[1];
63                 md=2;
64             }
65              else
66             {
67                 rk=rank[0];
68                 md=1;
69             }
70              if(rk > rank[2])
71             {
72                 rk=rank[2];
73                 md=3;
74             }
75              if(rk > rank[3])
76             {
77                 rk=rank[3];
78                 md=4;
79             }
80             printf("%d:%d\n", rk, md);
81         }
82         printf("\n");
83     }
84      return 0;
85 }

你可能感兴趣的:(1007 奥运排序问题)