1056. Mice and Rice (25)

系统 1734 0

 

时间限制
30 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

Mice and Rice  is the name of a programming contest in which each programmer must write a piece of code to control the movements of a mouse in a given map. The goal of each mouse is to eat as much rice as possible in order to become a FatMouse.

First the playing order is randomly decided for N P  programmers. Then every N G  programmers are grouped in a match. The fattest mouse in a group wins and enters the next turn. All the losers in this turn are ranked the same. Every N G winners are then grouped in the next match until a final winner is determined.

For the sake of simplicity, assume that the weight of each mouse is fixed once the programmer submits his/her code. Given the weights of all the mice and the initial playing order, you are supposed to output the ranks for the programmers.

Input Specification:

Each input file contains one test case. For each case, the first line contains 2 positive integers: N P  and N G  (<= 1000), the number of programmers and the maximum number of mice in a group, respectively. If there are less than N G  mice at the end of the player's list, then all the mice left will be put into the last group. The second line contains N P  distinct non-negative numbers W i  (i=0,...N P -1) where each W i is the weight of the i-th mouse respectively. The third line gives the initial playing order which is a permutation of 0,...N P -1 (assume that the programmers are numbered from 0 to N P -1). All the numbers in a line are separated by a space.

Output Specification:

For each test case, print the final ranks in a line. The i-th number is the rank of the i-th programmer, and all the numbers must be separated by a space, with no extra space at the end of the line.

Sample Input:
      11 3

25 18 0 46 37 3 19 22 57 56 10

6 0 8 7 10 5 9 1 4 2 3


    
Sample Output:
      5 5 5 2 5 5 5 3 1 3 5
      

        
            1
        
         #include<stdio.h>


        
            2
        
         #include<vector>


        
            3
        
         #include<map>


        
            4
        
         #include<algorithm>


        
            5
        
        
          using
        
        
          namespace
        
        
           std;


        
        
            6
        
        
            7
        
        
          struct
        
        
           MyStruct


        
        
            8
        
        
          {


        
        
            9
        
        
          int
        
        
           ID;


        
        
           10
        
        
          int
        
        
           wight;


        
        
           11
        
        
          };


        
        
           12
        
        
           13
        
        
          struct
        
        
           MyRank


        
        
           14
        
        
          {


        
        
           15
        
        
          int
        
        
           time;


        
        
           16
        
        
          int
        
        
           ID;


        
        
           17
        
        
          };


        
        
           18
        
        
           19
        
         vector<MyRank>
        
           ranking;


        
        
           20
        
        
           21
        
        
          void
        
         fun(vector<MyStruct> vv ,
        
          int
        
        
           Ng)


        
        
           22
        
        
          {


        
        
           23
        
             vector<MyStruct>
        
           tem;


        
        
           24
        
        
          for
        
        (
        
          int
        
         i = 
        
          0
        
        ;i< vv.size(); i++
        
          )


        
        
           25
        
        
              {


        
        
           26
        
        
          if
        
        ( i + Ng -
        
          1
        
         <
        
           vv.size())


        
        
           27
        
        
                  {


        
        
           28
        
        
          int
        
         MAX = -
        
          1
        
        
          ;


        
        
           29
        
        
          int
        
        
           index;


        
        
           30
        
        
          int
        
        
           j;


        
        
           31
        
        
          for
        
        (j = i ;j < i + Ng ;j++
        
          )


        
        
           32
        
        
                      {


        
        
           33
        
        
          if
        
        (vv[j].wight >
        
           MAX)


        
        
           34
        
        
                          {


        
        
           35
        
                             MAX =
        
           vv[j].wight;


        
        
           36
        
                             index =
        
           j;


        
        
           37
        
        
                          }


        
        
           38
        
        
                      }


        
        
           39
        
                     i = j-
        
          1
        
        
          ;


        
        
           40
        
        
                      tem.push_back(vv[index]);


        
        
           41
        
                     ++
        
          ranking[vv[index].ID].time;


        
        
           42
        
        
                  }


        
        
           43
        
        
          else
        
        
           44
        
        
                  {


        
        
           45
        
        
          int
        
         MAX = -
        
          1
        
        
          ;


        
        
           46
        
        
          int
        
        
           index;


        
        
           47
        
        
          int
        
        
           j;


        
        
           48
        
        
          for
        
        (j = i ;j < vv.size() ;j++
        
          )


        
        
           49
        
        
                      {


        
        
           50
        
        
          if
        
        (vv[j].wight >
        
           MAX)


        
        
           51
        
        
                          {


        
        
           52
        
                             MAX =
        
           vv[j].wight;


        
        
           53
        
                             index =
        
           j;


        
        
           54
        
        
                          }


        
        
           55
        
        
                      }


        
        
           56
        
                     i =
        
           j;


        
        
           57
        
        
                      tem.push_back(vv[index]);


        
        
           58
        
                     ++
        
          ranking[vv[index].ID].time;


        
        
           59
        
        
                  }


        
        
           60
        
        
              }


        
        
           61
        
        
           62
        
        
          if
        
        (tem.size() > 
        
          1
        
        
          )


        
        
           63
        
        
                  fun(tem,Ng);


        
        
           64
        
        
          }


        
        
           65
        
        
           66
        
        
          int
        
        
           cmp(MyRank a,MyRank b)


        
        
           67
        
        
          {


        
        
           68
        
        
          return
        
         a.time >
        
           b.time ;


        
        
           69
        
        
          }


        
        
           70
        
        
           71
        
        
          int
        
        
           main()


        
        
           72
        
        
          {


        
        
           73
        
        
          int
        
        
           Np,Ng,i;


        
        
           74
        
        
              MyStruct tem;


        
        
           75
        
        
              MyRank Rtem;


        
        
           76
        
        
          int
        
        
           index;


        
        
           77
        
             scanf(
        
          "
        
        
          %d%d
        
        
          "
        
        ,&Np,&
        
          Ng);


        
        
           78
        
             vector<MyStruct>
        
           v1,v2;


        
        
           79
        
        
          for
        
        (i = 
        
          0
        
        ;i< Np ;i++
        
          )


        
        
           80
        
        
              {


        
        
           81
        
                 scanf(
        
          "
        
        
          %d
        
        
          "
        
        ,&
        
          tem.wight);


        
        
           82
        
                 tem.ID =
        
           i;


        
        
           83
        
                 Rtem.ID =
        
           i;


        
        
           84
        
                 Rtem.time = 
        
          0
        
        
          ;


        
        
           85
        
        
                  ranking.push_back(Rtem);


        
        
           86
        
        
                  v1.push_back(tem);


        
        
           87
        
        
              }


        
        
           88
        
        
          for
        
        (i = 
        
          0
        
        ;i< Np ;i++
        
          )


        
        
           89
        
        
              {


        
        
           90
        
                 scanf(
        
          "
        
        
          %d
        
        
          "
        
        ,&
        
          index);


        
        
           91
        
        
                  v2.push_back(v1[index]);


        
        
           92
        
        
              }


        
        
           93
        
        
           94
        
        
              fun(v2,Ng);


        
        
           95
        
        
           96
        
        
              sort(ranking.begin(),ranking.end(),cmp);


        
        
           97
        
        
          int
        
         result[
        
          1001
        
        
          ];


        
        
           98
        
        
          int
        
         j = 
        
          1
        
        
          ;


        
        
           99
        
        
          for
        
        (i = 
        
          0
        
         ;i <ranking.size();i++
        
          )


        
        
          100
        
        
              {


        
        
          101
        
                 result[ranking[i].ID] =
        
           j;


        
        
          102
        
        
          int
        
         count = 
        
          1
        
        
          ;


        
        
          103
        
        
          int
        
         tem =
        
           ranking[i].time;


        
        
          104
        
        
          while
        
        (i+
        
          1
        
         <ranking.size()&&tem == ranking[i+
        
          1
        
        
          ].time)


        
        
          105
        
        
                  {


        
        
          106
        
                     ++
        
          i;


        
        
          107
        
                     ++
        
           count;


        
        
          108
        
                     result[ranking[i].ID] =
        
           j;


        
        
          109
        
        
                  }


        
        
          110
        
                 j = j+
        
          count;


        
        
          111
        
        
              }


        
        
          112
        
        
          113
        
        
          for
        
        (i = 
        
          0
        
         ;i < Np ;i++
        
          )


        
        
          114
        
        
              {


        
        
          115
        
        
          if
        
        (i == 
        
          0
        
        ) printf(
        
          "
        
        
          %d
        
        
          "
        
        
          ,result[i]);


        
        
          116
        
        
          else
        
         printf(
        
          "
        
        
           %d
        
        
          "
        
        
          ,result[i]);


        
        
          117
        
        
              }


        
        
          118
        
             printf(
        
          "
        
        
          \n
        
        
          "
        
        
          );


        
        
          119
        
        
          return
        
        
          0
        
        
          ;


        
        
          120
        
         }
      

 

1056. Mice and Rice (25)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论