题意:
输入两个正整数N和M(<=1000),接着输入两行,每行N个数,第一行为每只老鼠的重量,第二行为每只老鼠出战的顺序。输出它们的名次。(按照出战顺序每M只老鼠分为一组,剩余不足M只为一组,每组只能有一个胜者,其他老鼠排名均为这一轮胜者数量+1)
AAAAAccepted code:
1 #define HAVE_STRUCT_TIMESPEC 2 #include<bits/stdc++.h> 3 using namespace std; 4 int n,m; 5 int a[1007],b[1007]; 6 int num; 7 int ans[1007]; 8 int c[1007],d[1007]; 9 pair<int,int>e[1007]; 10 int flag; 11 bool vis[1007]; 12 void contest(){ 13 int cnt=0; 14 int round=0; 15 int no=0; 16 for(int i=1;i<=num;++i){ 17 c[++cnt]=b[i]; 18 if(cnt==m||i==num){ 19 ++round; 20 int mx=a[c[1]],pos=c[1]; 21 for(int j=2;j<=cnt;++j) 22 if(a[c[j]]>mx){ 23 mx=a[c[j]]; 24 pos=c[j]; 25 } 26 for(int j=1;j<=cnt;++j) 27 if(c[j]==pos) 28 d[++no]=c[j]; 29 else 30 vis[c[j]]=1; 31 cnt=0; 32 } 33 } 34 for(int i=1;i<=num;++i) 35 if(!ans[b[i]]&&vis[b[i]]) 36 ans[b[i]]=round+1; 37 if(round==1){ 38 ans[d[1]]=1; 39 flag=1; 40 } 41 for(int i=1;i<=no;++i) 42 b[i]=d[i]; 43 num=no; 44 no=0; 45 } 46 int main(){ 47 ios::sync_with_stdio(false); 48 cin.tie(NULL); 49 cout.tie(NULL); 50 cin>>n>>m; 51 for(int i=1;i<=n;++i) 52 cin>>a[i]; 53 for(int i=1;i<=n;++i){ 54 cin>>b[i]; 55 ++b[i]; 56 } 57 num=n; 58 while(!flag) 59 contest(); 60 cout<<ans[1]; 61 for(int i=2;i<=n;++i) 62 cout<<" "<<ans[i]; 63 return 0; 64 }